排序算法——选择排序

来源:互联网 发布:微波炉的工作原理 知乎 编辑:程序博客网 时间:2024/05/03 20:30
选择排序
选择排序是通过每一趟排序过程中从待排序记录中选择出关键字最小(大)的记录,将其依次放在数据表的最前或最后端的方法来实现整个数据表的有序排列。本节将介绍选择排序方法中最简单且最常用的简单选择排序。

选择排序基本思想
  第一趟排序在所有待排序的n个记录中选出关键字最小的记录,将它与数据表中的第一个记录交换位置,使关键字最小的记录处于数据表的最前端;第二趟在剩下的n-1个记录中再选出关键字最小的记录,将其与数据表中的第二个记录交换位置,使关键字次小的记录处于数据表的第二个位置;重复这样的操作,依次选出数据表中关键字第三小、第四小…的元素,将它们分别换到数据表的第三、第四…个位置上。排序共进行n-1趟,最终可实现数据表的升序排列。

下边是实现代码:

void chose_sort(int a[],int len){for (int i=0;i<len;i++){int minValueKey = i;for (int j=i+1;j<len;j++){ if (a[j]<a[minValueKey]) minValueKey=j;}if (i!=minValueKey){int temp=a[minValueKey];a[minValueKey]=a[i];a[i]=temp;}}}int main(int argc, char* argv[])  {int a[]={2,3,4,9,1,5,6,0,7,8};chose_sort(a,sizeof(a)/sizeof(int));return 0;} 

时间复杂度

简单选择排序的比较次数与序列的初始排序无关。 假设待排序的序列有 N 个元素,则比较次数总是N (N - 1) / 2

而移动次数与序列的初始排序有关。当序列正序时,移动次数最少,为 0.

当序列反序时,移动次数最多,为3N (N - 1) /  2。

所以,综合以上,简单排序的时间复杂度为 O(N2)。 

 

空间复杂度

简单选择排序需要占用一个临时空间,在交换数值时使用。

0 0
原创粉丝点击