希尔排序
⭐希尔排序,下标从1开始,0用于插入排序做哨兵
⭐希尔排序不稳定!
冒泡排序
第二趟,前边经过一系列对比后,走到下边这一步:
同理,第三趟也是
⭐冒泡排序每次交换都需要移动元素3次
⭐冒泡排序,每一趟都会使一个最大/最小元素在它的最终位置。
快速排序
⭐基准元素在最终位置,基准元素左边的都比它小,右边的都比它大,
⭐:下标从0开始
排序过程:
第一趟:
左边:
右边
快排代码:
cpp
using namespace std;
#include<iostream>
#include<math.h>
const int N = 100010;
int n;
int a[N];
void quick_sort(int a[], int left, int right)
{
if (left >= right)
{
return;
}
int x = a[left + right>>1], i = left-1, j = right+1;
//相当于除以2但比除以2运算时间短
while (i < j)
{
do i++; while (a[i] < x);
do j--; while (a[j] > x);
if (i < j)//交换
{
swap(a[i], a[j]);
}
}
quick_sort(a, left, j);
quick_sort(a, j + 1, right);
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
quick_sort(a, 0, n - 1);
for (int i = 0; i < n; i++)
{
cout << a[i] << " ";
}
return 0;
}
简单选择排序
选择排序:每⼀趟在待排序元素中选取关键字最⼩(或最⼤)的元素加⼊有序⼦序列
堆排序
堆的插入和删除
删除元素:用最后一个元素代替
归并排序
基数排序
总结: