排序算法(C实现)--------- 简单选择排序
2014-09-07 17:11
260 查看
选择排序的基本思想是:每一趟在n-i (i = 0,1,2,....,n-2)个记录中选取关键字最小的记录作为有序列序列中第i个记录。其中最简单且最熟悉的是简单选择排序。
一趟简单选择排序的操作为:通过n-i次关键字之间的比较,从n-i个记录中选出关键字最小的记录,并和第i个记录交换。
主要步骤:
1. 求出n-i个关键字中最小的记录。
2. 将该最小的记录与当前第i个记录交换
容易看出,简单选择排序过程中,所需进行记录移动的操作次数较少,其最小值为“0”,最大值为3(n-1)。然而,无论记录的初始排列如何,所需进行关键字之间的比较次数相同,均为n(n-1)/2,因此,总的时间复杂度也是O(n2)
一趟简单选择排序的操作为:通过n-i次关键字之间的比较,从n-i个记录中选出关键字最小的记录,并和第i个记录交换。
主要步骤:
1. 求出n-i个关键字中最小的记录。
2. 将该最小的记录与当前第i个记录交换
//从记录中选择出最小元素的位置 int selectMinKey(ElemType array[],int i,int length){ int index,minLoc; ElemType minKey = array[i]; minLoc = i; for(index = i+1; index < length;index++){ if(minKey > array[index]){ minKey = array[index]; minLoc = index; } } return minLoc; } //直接选择排序 void select_sort(ElemType array[],int length){ ElemType median; int i,minLoc; for(i = 0;i < length - 1;i++){ minLoc = selectMinKey(array,i,length); if(i != minLoc){ median = array[i]; array[i] = array[minLoc]; array[minLoc] = median; } } }
容易看出,简单选择排序过程中,所需进行记录移动的操作次数较少,其最小值为“0”,最大值为3(n-1)。然而,无论记录的初始排列如何,所需进行关键字之间的比较次数相同,均为n(n-1)/2,因此,总的时间复杂度也是O(n2)
相关文章推荐
- python实现2种简单的排序算法--冒泡排序和选择排序
- 排序算法复习(Java实现):插入,冒泡,选择,Shell,快速排序, 归并排序,堆排序,桶式排序,基数排序
- 简单的排序算法——插入排序,选择排序,交换排序(冒泡排序,快速排序)
- 几种基本的排序算法(选择排序,冒泡排序,快速排序,归并排序,希尔排序)C语言实现
- 选择排序 简单实现
- 简单选择排序的实现
- 简单选择排序的算法实现
- C#实现的3种排序算法--冒泡排序、选择排序、插入排序
- 排序算法--选择排序C++实现
- 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)
- 排序算法复习(Java实现): 插入,冒泡,选择,Shell,快速排序
- 【转】排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- C#实现所有经典排序算法(选择排序,冒泡排序,快速排序,插入排序,希尔排序)
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,快速排序
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- C语言实现 排序源程序(包括直接插入、希尔、冒泡、快速、简单选择、堆排序)
- C#实现所有经典排序算法(选择排序 冒泡排序 快速排序)
- 几种常用的排序算法:插入排序、冒泡排序、选择排序的算法及C++实现
- 用Java实现简单选择排序
- C#实现的3种排序算法--冒泡排序、选择排序、插入排序