简单选择排序算法
扫描二维码
随时随地手机看文章
1、简单选择排序算法(Simple Selection Sort)
---- 通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=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; //将当前下标定义为最小值下标 for(j=i+1;jlength;j++) { if(L->r[j]r[min]) //注意不是和第i个进行比较,是和前面的最小值进行比较 { min = j;//min是未排序的最小值的下标 } } 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; }
最大的特点是:交换移动数据次数相当少。无论最好最差的情况,其比较次数都是一样的多,第i趟排序需要进行n-i次关键字的
比较,此时需要比较(n-1)+(n-2)+....+1=n(n-1)/2次。
对于交换次数而言,最好的时候,交换为0次,最差的时候,交换次数是n-1次,总的时间复杂度是O(n^2).