簡單選擇排序算法
1、簡單選擇排序算法(Simple Selection Sort)
---- 通過n-i次關(guān)鍵字間的比較,從n-i+1個記錄中選出關(guān)鍵字最小的記錄,并和第i(1<=i<=n)個記錄進(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個進(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;
}最大的特點是:交換移動數(shù)據(jù)次數(shù)相當(dāng)少。無論最好最差的情況,其比較次數(shù)都是一樣的多,第i趟排序需要進(jìn)行n-i次關(guān)鍵字的
比較,此時需要比較(n-1)+(n-2)+....+1=n(n-1)/2次。
對于交換次數(shù)而言,最好的時候,交換為0次,最差的時候,交換次數(shù)是n-1次,總的時間復(fù)雜度是O(n^2).





