思想:把数据分成有序区和无序区,初始化无序区为空。无序区为所有待排序数据,选取无序区的最小值,把它和无序区的第一个数进行位置互换,重复上面,直到无序区只剩下最后一个数据为止。
现在有这么些数据 [ 14 6 45 67 16 ] 括号代表无序区
第一趟:
选取 [ 14 <strong>6</strong> 45 67 16 ] 的无序区的最小值 6
与14进行交换得到如下:
6 [ 14 45 67 16 ]
第二趟:
选取 6 [ 14 45 67 16 ] 的无序区的最小值 14,是自己,位置不换,如下:
6 14 [ 45 67 16 ]
第三趟:
选取 6 14 [ 45 67 16 ] 的无序区的最小值 16,16与45 进行位置交换,如下:
6 14 16 [ 67 45 ]
第四趟:
选取 6 14 16 [ 67 45 ] 的无序区的最小值 45,67与45 进行位置交换,如下:
6 14 16 45 [ 67 ]
第五趟:
选取 6 14 16 45 [ 67 ] 的无序区的最小值 67,67也是无序区的第一个数,位置不换,如下:
6 14 16 45 67
结束算法
下面是附上的C++代码
#include<iostream>
using namespace std;
void simple_sort(int data[], int);
int main(){
int data[] = {14,6,45,67,16};
int length = sizeof(data)/sizeof(int);
cout<<"排序前数据:";
cout<<endl;
for(int i=0; i<length-1; i++){
cout<<data[i]<<",";
}
cout<<data[length-1];
cout<<endl;
cout<<endl;
simple_sort(data,length);
cout<<"排序后数据:";
cout<<endl;
for(i=0; i<length-1; i++){
cout<<data[i]<<",";
}
cout<<data[length-1];
cout<<endl;
system("pause");
return 0;
}
void simple_sort(int data[], int length){
int temp; //交换时临时存储数据使用
for(int i=0; i<length-1; i++){
int min = i; //min用来存放最小值的位置
for(int j=i+1; j<length; j++){
if(data[min]>data[j]){
min = j;
}
}
if(data[min]<=data[i]){
temp = data[min];
data[min] = data[i];
data[i] = temp;
}
}
}
运行如下显示: