排序算啊之选择排序
来源:互联网 发布:海文网络班班代 编辑:程序博客网 时间:2024/06/06 00:53
工作原理:
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n - 1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。
选择排序
void SelectSort(int *arr, int size){ assert(arr); int index = 0; for (int i = 0; i < size - 1; i++) { index = i; for (int j = i+1; j < size; j++) { if (arr[index]>arr[j]) { index =j; } } if (i != index) { swap(arr[i], arr[index]); } }}
堆排序:
排序步骤:
(1)最大堆调整:将堆的末端子节点作调整,使得子节点永远小于父节点。
(2)创建最大堆:将堆所有数据重新排序。
(3)堆排序:移除位在第一个数据的根节点,并做最大堆调整的递归运算。
//调堆(大堆)void AdjustDown(int *arr, int size, int parent){ int child = parent * 2 + 1; while (child < size) { if (child + 1 < size && arr[child] < arr[child + 1]) { ++child; } if (arr[parent] < arr[child]) { swap(arr[parent], arr[child]); parent = child; child = parent * 2 + 1; } else { break; } }}//堆排序void HeapSort(int *arr, int size){ //建堆 for (int i = (size - 2) / 2; i >= 0; i--) { AdjustDown(arr, size, i); } for (int i = size - 1; i > 0; i--) { swap(arr[0], arr[i]); AdjustDown(arr, i, 0); }}
0 0
- 排序算啊之选择排序
- 排序之选择排序
- 排序之选择排序
- 排序之选择排序
- 排序之选择排序
- 排序之选择排序
- 排序之选择排序
- 排序之选择排序
- 排序之选择排序
- 排序之选择排序
- 排序之选择排序
- 排序之选择排序
- 排序之选择排序
- 排序之选择排序
- 排序之选择排序
- 排序之选择排序
- 排序之选择排序
- 排序算发之选择排序
- 机器学习之线性回归
- maven添加sqljdbc依赖
- 一些有用的函数
- TOEFL writing
- iOS 缓存清除方法
- 排序算啊之选择排序
- stack or queue
- Codeforces Round #225 (Div. 1) C-Propagating tree (DFS序+线段树/树状数组)
- JPA中注解的应用(学习笔记)
- numpy学习笔记二:numpy基础
- Linux屏幕录像
- angular $location服务
- linux基本命令(40)——wc命令
- Git安装及常用命令简介