无聊写排序之 ---- 选择排序(Select Sort)
2014-10-22 16:26
295 查看
前面讲过了冒泡排序, 冒泡排序时需要对两个相邻位置的元素进行比较,若反序就需要进行交换相邻的位置,这样每一次排序过程中都会有很多的交换数据的操作出现,而选择排序则避开了这个问题,每次排序都是针对一个当前位置进行,每一趟最多只交换一次。
选择排序(Select Sort):每一次在剩余的n-i+1个元素中选取最小的那个元素作为第i个位置上的数据,选取过程最多n-i次的比较和一次交换。
代码如下所示:
排序过程如下:
原始数组
第一步: 当i = 0时 min = 0 从 下标0到5中找到最小的值 即arr[5] = 0 然后和i = 0 的位置交换 这样就排序了第一个位置的值
第二步:i = 1时 min = 1 从 下标1到5中找到最小的值 即arr[5] = 2 然后和i = 1 的位置交换 这样就排序了第2个位置的值
重复以上步骤,依次排序好剩余的第2,3,4,5个位置即完成了排序。
从选择排序的过程可以看出, 最大的特点是交换移动数据的次数相对较少, 这样就节约了这一部分的时间, 对于执行效率来讲, 最好还是最差情况下期比较次数都一样多,第i趟都需要进行n-i次关键字的比较,而对于交换次数来讲,最好的情况下可以不进行交换,而最差的情况下交换次数也就是n-1次,虽然时间复杂度上选择排序的时间复杂度也是O(N^2)和冒泡排序是一样的,但是在性能上因为他的较少的交换却要略优于冒泡排序。
选择排序(Select Sort):每一次在剩余的n-i+1个元素中选取最小的那个元素作为第i个位置上的数据,选取过程最多n-i次的比较和一次交换。
代码如下所示:
void SelectSort(int arr[], int n) { int min; for (int i = 0; i < n-1; i++) { min = i; // 当前下标定义为新的最小值 for (int j = i+1; j < n; j++) // i开始的元素中选取最小的元素 { if (arr[j] < arr[min]) // 选取最小值并记录其下标位置 { min = j; } } if (min != i) // 如果min != i 说明当前位置不是最小值 { // 交换更新当前位置为最小值 Swap(arr, min, i); } } }
排序过程如下:
原始数组
2 | 9 | 4 | 3 | 7 | 0 |
0 | 9 | 4 | 3 | 7 | 2 |
0 | 2 | 4 | 3 | 7 | 9 |
从选择排序的过程可以看出, 最大的特点是交换移动数据的次数相对较少, 这样就节约了这一部分的时间, 对于执行效率来讲, 最好还是最差情况下期比较次数都一样多,第i趟都需要进行n-i次关键字的比较,而对于交换次数来讲,最好的情况下可以不进行交换,而最差的情况下交换次数也就是n-1次,虽然时间复杂度上选择排序的时间复杂度也是O(N^2)和冒泡排序是一样的,但是在性能上因为他的较少的交换却要略优于冒泡排序。
相关文章推荐
- 算法----选择排序(select sort)
- [排序] 选择排序(Select Sort)
- 算法----选择排序(select sort)
- 快速排序与快速选择算法(quick sort and quick select algorithm)
- 选择排序 Selecttion Sort
- 批次查找策略select * from 存取顺序找到的批次表table where 选择条件B sort by 排序C
- 选择排序----select sort
- 排序算法总结(三)选择排序【Select Sort】
- 八大排序算法之三选择排序—简单选择排序(Simple Selection Sort)
- java三种排序(冒泡,选择,方法sort)
- Selection sort 选择排序
- 【内部排序】六:直接选择排序(Straight Selection Sort)详解与代码
- 堆积排序(HeapSort) - 改良的选择排序
- 排序1+2:交换排序(ExchangeSort),选择排序(SelectSort)和插入排序(Insertsort)
- 无聊写排序之 ----基数排序(RadixSort)
- 选择排序—简单选择排序(Simple Selection Sort)原理以及Java实现
- 笔试算法题(56):快速排序实现之非递归实现,最小k值选择(non-recursive version, Minimal Kth Selection of Quick Sort)
- 排序1+2:交换排序(ExchangeSort),选择排序(SelectSort)和插入排序(Insertsort)
- 八大排序算法之四选择排序—堆排序(Heap Sort)
- 无聊写排序之 ---- 归并排序(MergeSort) 递归实现