三种简单排序的区别:
冒泡排序是 未排序部分,相邻元素之间两两比较移动,从而找出最值。
插入排序是 某个待排序元素与以排元素两两比较, 从而找到待排元素所应在的位置
选择排序是 在未排部分,一次遍历找到最大值,然后将其置于未排部分的末尾位置。
选择排序、冒泡排序,都是遍历未排序部分, 所不同的是:
选择排序,遍历时,不进行移动,而是标记出最大值所在的索引
而冒泡排序,遍历时,两两比较,移动频繁。
因此,选择排序的效率要高于冒泡排序。
以下是摘自网络上的图示:
各种排序算法实现的关键:
在设计各个具体算法代码时, 关键之处是弄清楚 哪些元素是未排的,哪些元素是已经排好的。
即分清: 未排元素 与 以排元素的分界线
程序代码:
[cpp] view plaincopy
- 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;
- }
- }