1.插入排序
void insert_sort(int a[], int n) { for (int i = 1; i < n; i++) { int temp = a[i], j = i-1; for (int j = i - 1; a[j]>temp&&j>=0; j--) a[j+1] = a[j]; a[j+1] = temp; } }
也可以用监视哨
2.希尔排序
void ShellSort(int r[], int n) { int d, i, j; for (d = n/2; d >= 1; d = d/2) { for (i = d+1; i <= n; i++) { r[0] = r[i], j = i-d; while (j>0&&r[0]<r[j]) { r[j+d] = r[j]; j = j-d; } r[j+d] = r[0]; } } }
3.归并排序
void Merge(int r[], int s, int m, int t) { int i = s, j = m+1, k = s; while (i<=m&&j<=t) r1[k++] = r[i]<=r[j] ? r[i++] : r[j++]; while (i<=m) r1[k++] = r[i++]; while (j<=t) r1[k++] = r[j++]; for (i = s; i <= t; i++) r[i] = r[i]; }
>递归法
void Mergesort1(int r[], int s, int t) { if(s==t) return; int m = (s+t)/2; Mergesort(r, s, m); Mergesort(r, m+1, t); Merge(r, s, m, t); }
>迭代法
void MergeSort2(int r[], int n, int h) { for (int h = 1; h < n; h*=2) { for (int i = 1; i+2h-1 <= n; i += 2h) Merge(r, i, i+h-1, i+2*h-1); if (i+h-1<n) Merge(r, i, i+h-1, n); } }
4.快速排序
https://blog.csdn.net/zpznba/article/details/83745205
https://blog.csdn.net/wangchao701123/article/details/81276913
之后再做分析吧,先把数据结构过了