思想:把數(shù)據(jù)分成有序區(qū)和無(wú)序區(qū),初始化無(wú)序區(qū)為空。無(wú)序區(qū)為所有待排序數(shù)據(jù),選取無(wú)序區(qū)的最小值,把它和無(wú)序區(qū)的第一個(gè)數(shù)進(jìn)行位置互換,重復(fù)上面,直到無(wú)序區(qū)只剩下最后一個(gè)數(shù)據(jù)為止。
現(xiàn)在有這么些數(shù)據(jù) [ 14 6 45 67 16 ] 括號(hào)代表無(wú)序區(qū)
第一趟:
選取 [ 14 <strong>6</strong> 45 67 16 ] 的無(wú)序區(qū)的最小值 6
與14進(jìn)行交換得到如下:
6 [ 14 45 67 16 ]
第二趟:
選取 6 [ 14 45 67 16 ] 的無(wú)序區(qū)的最小值 14,是自己,位置不換,如下:
6 14 [ 45 67 16 ]
第三趟:
選取 6 14 [ 45 67 16 ] 的無(wú)序區(qū)的最小值 16,16與45 進(jìn)行位置交換,如下:
6 14 16 [ 67 45 ]
第四趟:
選取 6 14 16 [ 67 45 ] 的無(wú)序區(qū)的最小值 45,67與45 進(jìn)行位置交換,如下:
6 14 16 45 [ 67 ]
第五趟:
選取 6 14 16 45 [ 67 ] 的無(wú)序區(qū)的最小值 67,67也是無(wú)序區(qū)的第一個(gè)數(shù),位置不換,如下:
6 14 16 45 67
結(jié)束算法
下面是附上的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<<"排序前數(shù)據(jù):";
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<<"排序后數(shù)據(jù):";
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; //交換時(shí)臨時(shí)存儲(chǔ)數(shù)據(jù)使用
for(int i=0; i<length-1; i++){
int min = i; //min用來(lái)存放最小值的位置
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;
}
}
}
運(yùn)行如下顯示:

Paste_Image.png