基础算法之四--排序: 之选择排序
2012-02-22 15:00
323 查看
三种简单排序的区别:
冒泡排序是 未排序部分,相邻元素之间两两比较移动,从而找出最值。
插入排序是 某个待排序元素与以排元素两两比较, 从而找到待排元素所应在的位置
选择排序是 在未排部分,一次遍历找到最大值,然后将其置于未排部分的末尾位置。
选择排序、冒泡排序,都是遍历未排序部分, 所不同的是:
选择排序,遍历时,不进行移动,而是标记出最大值所在的索引
而冒泡排序,遍历时,两两比较,移动频繁。
因此,选择排序的效率要高于冒泡排序。
以下是摘自网络上的图示:
各种排序算法实现的关键:
在设计各个具体算法代码时, 关键之处是弄清楚 哪些元素是未排的,哪些元素是已经排好的。
即分清: 未排元素 与 以排元素的分界线
程序代码:
冒泡排序是 未排序部分,相邻元素之间两两比较移动,从而找出最值。
插入排序是 某个待排序元素与以排元素两两比较, 从而找到待排元素所应在的位置
选择排序是 在未排部分,一次遍历找到最大值,然后将其置于未排部分的末尾位置。
选择排序、冒泡排序,都是遍历未排序部分, 所不同的是:
选择排序,遍历时,不进行移动,而是标记出最大值所在的索引
而冒泡排序,遍历时,两两比较,移动频繁。
因此,选择排序的效率要高于冒泡排序。
以下是摘自网络上的图示:
各种排序算法实现的关键:
在设计各个具体算法代码时, 关键之处是弄清楚 哪些元素是未排的,哪些元素是已经排好的。
即分清: 未排元素 与 以排元素的分界线
程序代码:
void StraightSelectionSort(int *p, int n) { int i,j,t; int indexMax; for (i=0;i<n;i++) // 0....n-1 { // 未排元素 0...n-1-i 以排元素 n-i...n-1 for (j=0,indexMax=0;j<n-i;j++) { if (p[j]>=p[indexMax]) { indexMax=j; } } t=p[n-i-1]; p[n-i-1]=p[indexMax]; p[indexMax]=t; } }
相关文章推荐
- 【基础算法】选择排序
- 基础算法之排序(2)--简单选择排序
- 算法基础之排序篇-选择排序
- 基础算法-直接选择排序
- PHP四种基础算法详解(冒泡排序、选择排序、插入排序、快速排序)
- 算法基础:排序(一)——选择排序、插入排序、Shell排序——Python实现
- 基础算法 :冒泡排序,选择排序。。。。
- 算法基础:排序(一)——选择排序、插入排序、Shell排序——Python实现
- java基础算法之选择排序
- 基础算法之排序(2)--选择排序 改进
- 数据结构与算法——三种基础排序算法C#实现(冒泡排序、选择排序、插入排序)
- 算法基础之----二元选择排序
- 数据结构与算法之基础排序(冒泡/插入/选择)<十>
- 基础算法:选择排序
- 基础算法-直接选择排序
- 基础算法之选择排序
- 算法基础之插入排序,选择排序
- 基础算法之 选择排序
- 基础算法(三)---选择排序(Java)
- 【基础算法】选择排序与冒泡排序