簡(jiǎn)單選擇排序算法
1、簡(jiǎn)單選擇排序算法(Simple Selection Sort)
---- 通過(guò)n-i次關(guān)鍵字間的比較,從n-i+1個(gè)記錄中選出關(guān)鍵字最小的記錄,并和第i(1<=i<=n)個(gè)記錄進(jìn)行交換。
#define?MaxSize?10 typedef?struct? { int?r[MaxSize]; int?length; }SqList; void?swap(SqList?*L,int?i,int?j) { int?t?=?L->r[i]; L->r[i]?=?L->r[j]; L->r[j]?=?t; } void?SelectSort(SqList?*L) { int?i,j,min; for(i=0;ilength-1;i++) { min?=?i; //將當(dāng)前下標(biāo)定義為最小值下標(biāo) for(j=i+1;jlength;j++) { if(L->r[j]r[min])?//注意不是和第i個(gè)進(jìn)行比較,是和前面的最小值進(jìn)行比較 { min?=?j;//min是未排序的最小值的下標(biāo) } } if(i!=min) { swap(L,i,min); } } } int?main() { SqList?*L?=?(SqList*)malloc(sizeof(SqList)); int?a[MaxSize]?=?{9,1,5,8,3,7,4,6,2,0}; for(int?i=0;ir[i]?=?a[i]; } L->length?=?MaxSize; SelectSort(L); cout<<"排序后的序列如下:"<<endl; for(int?i=0;ilength;i++) { cout<r[i]<<"?"; } cout<<endl; system("pause"); return?0; }
最大的特點(diǎn)是:交換移動(dòng)數(shù)據(jù)次數(shù)相當(dāng)少。無(wú)論最好最差的情況,其比較次數(shù)都是一樣的多,第i趟排序需要進(jìn)行n-i次關(guān)鍵字的
比較,此時(shí)需要比較(n-1)+(n-2)+....+1=n(n-1)/2次。
對(duì)于交換次數(shù)而言,最好的時(shí)候,交換為0次,最差的時(shí)候,交換次數(shù)是n-1次,總的時(shí)間復(fù)雜度是O(n^2).