欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

九大经典算法之选择排序、堆排序

发布时间:2023/11/30 38 豆豆
生活随笔 收集整理的这篇文章主要介绍了 九大经典算法之选择排序、堆排序 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

05 选择排序 (Selection Sort)

原理:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。

void selection_sort(int arr[], int n) {for (int i = 0;i < n - 1;i++) {int temp = a[i];int t = i;for (int j = i + 1;j < n;j++) {if (a[j] < temp) {temp = a[j];t = j;} }a[t] = a[i];a[i] = temp;} }

空间效率:O(1)

时间效率:最好情况:O(N)             平均情况:O(N^2)                       最坏情况:O(N^2)

稳定性(相同元素相对位置变化情况):不稳定

比较次数与初始状态无关

06 堆排序(Heap Sort)

堆排序是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

void heap_sort(int arr[], int n) {int i,temp;for (i = (n - 2) / 2; i >= 0; i--)percdown(arr, n, i);for (i = n - 1;i > 0;i--) {temp = arr[i];arr[i] = arr[0];arr[0] = temp;percdown(arr, i, 0);} }void percdown(int arr[], int n, int i) {int child;int x = arr[i];for (;i * 2 + 1 <= n - 1;i = child) {child = i * 2 + 1;if (child < n - 1 && arr[child + 1] > arr[child])child++;if (x >= arr[child]) break;else arr[i] = arr[child];}arr[i] = x; }

空间效率:O(1)

时间效率:最好情况:O(Nlog2N)                平均情况:O(Nlog2N)                        最坏情况:O(Nlog2N)   

稳定性(相同元素相对位置变化情况):不稳定

转载于:https://www.cnblogs.com/wanghao-boke/p/10424339.html

总结

以上是生活随笔为你收集整理的九大经典算法之选择排序、堆排序的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。