1. 程式人生 > 其它 >簡單排序總結

簡單排序總結

#include <bits/stdc++.h>
using namespace std;

//直接插入排序
void insert_sort(int a[], int n)
{
    for(int i = 2; i <= n; i++)
    {
        if(a[i] < a[i - 1])
        {
            a[0] = a[i];
            int j;
            for(j = i - 1; a[0] < a[j]; j--)
                a[j + 1] = a[j];
            a[
j + 1] = a[0]; } } } //折半插入排序 void binary_insertsort(int a[], int n) { for(int i = 2; i <= n; i++) { int l = 1, r = i - 1, temp = a[i]; while(l <= r) { int mid = (l + r) / 2; if(a[mid] > temp) r = mid - 1; else
l = mid + 1; } for(int j = i - 1; j >= r + 1; j--) a[j + 1] = a[j]; a[r + 1] = temp; } } //希爾排序 void shell_sort(int a[], int n) { for(int d = n / 2; d >= 1; d /= 2) //增量 { for(int i = d + 1; i <= n; i++) { if
(a[i] < a[i - d]) { a[0] = a[i]; int j; for(j = i - d; j >= 0 && a[0] < a[j]; j -= d) a[j + d] = a[j]; a[j + d] = a[0]; } } } } //簡單選擇排序 void select_sort(int a[], int n) { for(int i = 1; i < n; i++) { int minn = a[i], k = i; for(int j = i + 1; j <= n; j++) if(a[j] < minn) { minn = a[j]; k = j; } if(k != i) swap(a[i], a[k]); } } //氣泡排序 void bubble_sort(int a[], int n) { int flag = 1; for(int i = 0; i < n - 1 && flag; i++) { flag = 0; for(int j = 1; j <= n - 1 - i; j++) if(a[j + 1] < a[j]) swap(a[j + 1], a[j]), flag = 1; } } //快速排序 void quick_sort(int a[], int l, int r) { if(l >= r) return; int i = l, j = r, temp = a[l]; while(i < j) { while(i < j && a[j] >= temp) j--; while(i < j && a[i] <= temp) i++; if(i < j) swap(a[i], a[j]); } a[l] = a[i]; a[i] = temp; quick_sort(a, l, i - 1), quick_sort(a, i + 1, r); } int main() { int a[100], n; cin >> n; for(int i = 1; i <= n; i++) cin >> a[i]; //insert_sort(a, n); //quick_sort(a, 1, n); //shell_sort(a, n); //bubble_sort(a, n); //select_sort(a, n); binary_insertsort(a, n); for(int i = 1; i <= n; i++) cout << a[i] << ' '; return 0; }