基本思想:
将初始序列(A[0]~A[n-1])作为待排序序列,第一趟在待排序序列(A[0]~A[n-1])中找最小值元素,与该序列中第一个元素A[0]交换,这样子序列(A[0])有序;下一趟排序在待排序子序列(A[1]~A[n-1])中进行。第 i 趟排序,A[i-1]~A[n-1] 中,找到最小元素,与该子序列中第一个元素 A[i-1] 交换。经过n-1趟排序后使得初始序列有序。
简单选择排序示例:
代码:
void SelectSort(int A[],int n)//简单选择排序 { int small; for(int i=0; i<n; i++) { small=i; for(int j=i+1; j<n; j++) { if(A[j]<A[small]) small=j; } swap(A[i],A[small]); } }
该算法和初始序列排列无关。无论初始序列如何,该算法都必须执行n-1趟,每趟执行n-i-1次关键字的比较,
这样总的比较次数为:
因此,简单选择排序的最好、最坏和平均时间复杂度都为O(n^2)。
此外,该排序算法经过一趟排序可以确定一个元素的最终位置。简单选择排序是不稳定的排序算法。
参考资料:
《数据结构》 陈慧楠著 人民邮电出版社
原文地址:http://blog.csdn.net/happywq2009/article/details/45503139