本篇文章主要介绍了" 八大排序算法",主要涉及到方面的内容,对于其他编程jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下:
八大排序算法标签:算法 查找和排序1. 插入排序—直接插入排序 ( 稳定的 O(nlogn) )基本思想: 将一个记录插入到已排序好的有序表中,从而得到一个...
void ShellInsertSort(vector<int> &num, int n, int dk) {
for (int i = dk; i < n; ++i) {
int j = i;
while (j - dk >= 0 && num[j] < num[j - dk]) {
swap(num[j], num[j - dk]);
j -= dk;
}
}
}
void ShellSort(vector<int> &num) {
int dk = num.size() / 2;
while (dk >= 1) {
ShellInsertSort(num, num.size(), dk);
dk /= 2;
}
}
3. 选择排序—简单选择排序(Simple Selection Sort) (不稳定 O(n2) )
基本思想:
在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。
操作方法:
第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换;
第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换;
以此类推…..
第i 趟,则从第i 个记录开始的n-i+1 个记录中选出关键码最小的记录与第i 个记录交换,
直到整个序列按关键码有序。
算法实现:
int SelectMinKey(vector<int> &num, int i) {
int minKey = i;
for (int j = i + 1; j < num.size(); ++j) {
minKey = num[j] < num[minKey] ? j : minKey;
}
return minKey;
}
void SimpleSelectSort(vector<int> &num) {
for (int i = 0; i < num.size(); ++i) {
int minKey = SelectMinKey(num, i);
if (minKey != i)
swap(num[minKey], num[i]);
}
}
4. 选择排序—堆排序(Heap Sort) ( 不稳定的 O(nlogn) )
基本思想: