转载请注明出处。
假设升序排列n个元素。
1、在n个元素中找到最小的和第一个元素交换,选择排序不稳定。
2、在后n-1个元素中找到最小的和第二个元素交换。
3、以此类推,不断扩大有序区的范围。
时间复杂度:
历次遍历依次需要比较n-1次,n-2次,。。。,1次。总比较次数为n(n-1)/2。
时间复杂度为O()。
测试代码:
#include<iostream>
#include<iterator>
using namespace std;
void selectionSort(int list[], int length){
int min, temp;
for(int i=0; i<length; i++){
min = i;
for(int j=i+1; j<length; j++){
if(list[min] > list[j]){ //ascend
min = j;
}
}
if(min != i){
temp = list[i]; //swap
list[i] = list[min];
list[min] = temp;
}
}
}
int main(){
ostream_iterator<int> screen(cout, ", ");
int list[] = {9, 8, 7, 6, 5, 4};
selectionSort(list, sizeof(list)/sizeof(int));
copy(list, list+sizeof(list)/sizeof(int), screen);
cout << endl;
return 0;
}
参考资料:
本文详细介绍了选择排序算法的基本原理,包括其工作流程、时间复杂度分析及C++实现代码。通过实例演示了如何对一个整数数组进行排序,并提供了完整的源代码。
18万+

被折叠的 条评论
为什么被折叠?



