//下面的算法是快速排序的原形,霍尔排序
#include<stdio.h> int q(int *a, int n, int m) { int low = n, high = m; int temp = a[low]; int i; while (low < high) { while(low < high && a[high] >= temp) { --high; } a[low] = a[high]; while(low < high && a[low] <= temp) { ++low; } a[high] = a[low]; } a[high] = temp; return high; } void qsort(int *a, int n, int m) { int high; if(n < m) { high = q(a, n, m); } if(n < high-1) { qsort(a, n, high-1); } if(m > high+1) { qsort(a, high+1, m); } } int main() { int *a; int i, j, length; int temp = 0; printf("input :"); scanf("%d",&length); a = (int*) malloc((length) * sizeof(int)); printf("input %d Numble :", length); for(i = 0; i < length; i++) { scanf(" %d", &a[i]); } qsort(a, 0, length-1); for(i = 0; i < length; i++) { printf("%d ",a[i]); } printf("\n"); }
// 改进后的快速排序
int sort1(int *a, int n, int m) { int i = n, j = n; int key = a[m], temp; if( n >= m) { return 1; } while(j <= m) { if( a[j] <= key) { temp = a[j]; a[j] = a[i]; a[i] = temp; i++; j++; } else { j++; } } i = i - 1; sort1(a, n, i-1); sort1(a, i+1, m); return 1; }