1.插入排序
直接插入排序
折半插入排序void InsertSort(int a[], int n) { int min; for (int i = 1; i < n; ++i) { if (a[i] < a[i-1]) { min = a[i]; a[i] = a[i-1]; int j; for (j = i-2; min < a[j]; --j) { a[j+1] = a[j]; } a[j+1] = min; } } }
void BInsertSort(int a[], int n) { int min; for (int i = 1; i < n; ++i) { min = a[i]; int low = 0 , high = i - 1, m; while (low <= high) { m = (low + high) / 2; if (min < a[m]) high = m - 1; else low = m + 1; } for (int j = i - 1; j >= high + 1; --j) a[j+1] = a[j]; a[high+1] = min; } }
2.希尔排序
3.冒泡排序
void ShellSort(int a[], int n) { int j, gap; for (gap = n / 2; gap > 0; gap /= 2) for (j = gap; j < n; j++)//从数组第gap个元素开始 if (a[j] < a[j - gap])//每个元素与自己组内的数据进行直接插入排序 { int temp = a[j]; int k = j - gap; while (k >= 0 && a[k] > temp) { a[k + gap] = a[k]; k -= gap; } a[k + gap] = temp; } }
4.快速排序void ShellSort(int a[], int n) { int j, gap; for (gap = n / 2; gap > 0; gap /= 2) for (j = gap; j < n; j++)//从数组第gap个元素开始 if (a[j] < a[j - gap])//每个元素与自己组内的数据进行直接插入排序 { int temp = a[j]; int k = j - gap; while (k >= 0 && a[k] > temp) { a[k + gap] = a[k]; k -= gap; } a[k + gap] = temp; } }
一趟快速排序
int Partition(int a[], int low, int high) { int key = a[low]; int pivotkey = a[low]; while (low < high) { while (low < high && a[high] >= pivotkey) --high; a[low] = a[high]; while(low < high &&a[low] <= pivotkey) ++low; a[high] = a[low]; } a[low] = key; return low; }
递归方法
void QuickSort(int a[], int low, int high) { int pivotkey; if(low < high) { pivotkey = Partition(a, low, high); QuickSort(a, low, pivotkey-1); QuickSort(a, pivotkey+1, high); } }
非递归方法
未完待续