您的位置:首页 > 其它

经典排序之 选择排序

2016-03-24 21:01 204 查看
现在简单来讲一下选择排序的思想:

我们接触选择排序的时间很长了,也是我们编程时需要最先接触的程序。他的思想确实较简单。

算法思想:

  选择排序需要针对数组从头到尾进行扫描,其实就是记录下扫描一遍后整个数组的最小元素和最小元素的位置,然后和第一个元素进行交换,这样经过一遍排序我们就可以确定一个元素的最终位置;然后从第二个数据开始再次循环扫描交换,直到最后;在这里交换时有一个优化的过程,如果最小元素的位置和之前记录的位置一样,则可以通过比较,避免无谓的交换,节省时间和空间。

选择排序是一个不稳定的排序,最好最坏和平均下来的时间复杂度都是O(n2);

算法实现:

#include<iostream>
using namespace std;

void swap(int &a, int &b){
int temp = a;
a = b;
b = temp;
}

void selectSort(int *data, int length){

if(data == NULL || length < 0){
return;
}

for(int i = 0; i < length - 1; i++){
int value = data[i];
int index = i;

for(int j = i + 1; j < length; j++){
if(data[j] < value){
value = data[j];                        //记录每一次的最小值
index = j;                              //记录每一次的索最小值索引
}
}

if(index == i){                                 //简单优化
continue;
}

swap(data[i], data[index]);                      //交换阶段
}
}

int main(){                                              //测试代码
int str[] = {34, 23, 4, 78, 1, 0, 45, 9, 33, 6, 234};
int len = sizeof(str) / sizeof(int);
selectSort(str, len);

for(int k = 0; k < len; k++){
cout<< str[k]<< ' ';
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: