刚学c++,利用两种间的排序算法来练练手0.0
1.冒泡法排序
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
int main(){
int n_array[] = {7,2,1,4,6};
int i,j;
int temp = 0;
int len = sizeof(n_array)/sizeof(n_array[0]);
cout<<"数组长度为"<<len<<endl;
for(i=0;i<len;i++){
for (j=0;j<len-i-1;j++){
if(n_array[j]>n_array[j+1]){
temp = n_array[j];
n_array[j] = n_array[j+1];
n_array[j+1] = temp;
}
}
}
cout<<"数组顺序排列为"<<endl;
for(i=0;i<len;++i){
cout<<n_array[i]<<endl;
}
}
2.快速排序
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
int main(){
int n_array[] = {7,2,1,4,6};
int i,j,min_index;
int temp = 0;
int len = sizeof(n_array)/sizeof(n_array[0]);
cout<<"数组长度为"<<len<<endl;
for(i=0;i<len;i++){
min_index = i;
for (j=i+1;j<len;j++){
if(n_array[min_index]>n_array[j]){
min_index = j;
}
}
if (min_index!=i){
temp = n_array[i];
n_array[i] = n_array[min_index];
n_array[min_index] = temp;
}
}
cout<<"数组顺序排列为"<<endl;
for(i=0;i<len;++i){
cout<<n_array[i]<<endl;
}
}
总结以下两种算法的思路不同点:
冒泡法:每次比较的时候某一个位置的数只比较一次,且都在相邻两个数之间进行比较,找到最大值(或最小值),通过冒泡的方式实现。
选择排序:第一个循环里假设第一个位置的数为最小值,依次与其他的位置的数进行比较,如果有小于当前的位置的数,则两个数交换位置,从而确定第一个最小值,紧接着假定当前的第二个数为出去第一个最小值的情况下的最小值,第二个循环将第二个数分别与后续的参数分别进行比较,如果有小于第二个位置数的则进行数据交换,从而确定第二小的值。