1、算法思想:
从待排序记录序列中选取一个记录(通常选取第一个记录)为枢轴,其关键字设为K1然后将其余关键字小于k1的记录移到前面而将关键字大于或等于k1的记录移到后面,结果将待排序记录序列分为两个子表,最后将关键字为k1的记录插到其分界线处的位置,将这个过程称为一趟快速排序。通过一次划分之后,然后对剩下的子表再进行划分,形成递归
C描述:
#include <stdio.h> void quick_sort( int *a, int n) { int i, j, p, tmp; if (n < 2) return; }
void quick_sort( int *a, int n) { int i, j, p, tmp; if (n < 2) return; p = a[n / 2]; // Get the middle element as pivot .. for ( i = 0, j = n -1;; i++, j--) { //TODO ... } }
void quick_sort( int *a, int n) { int i, j, p, tmp; if (n < 2) return; p = a[n / 2]; // Get the middle element as pivot .. for ( i = 0, j = n -1;; i++, j--) { while (a[i] < p) i++; while (p < a[j]) j--; } }
void quick_sort( int *a, int n) { int i, j, p, tmp; if (n < 2) return; p = a[n / 2]; // Get the middle element as pivot .. for ( i = 0, j = n -1;; i++, j--) { while (a[i] < p) i++; while (p < a[j]) j--; if ( i >= j) break; } }
#include <stdio.h> void quick_sort( int *a, int n) { int i, j, p, tmp; if (n < 2) return; p = a[n / 2]; // Get the middle element as pivot .. for ( i = 0, j = n -1;; i++, j--) { while (a[i] < p) i++; while (p < a[j]) j--; if ( i >= j) break; tmp = a[i]; a[i] = a[j]; a[j] = tmp; //swap both .. } } int main(void) { int a[] = { 2, 5, 3, 1, 4}; int n = sizeof a /sizeof a[0]; int i; for (i = 0; i < n; i++) printf("%d%s", a[i], i == n -1 ? "\n" : " "); quick_sort(a, n); for (i = 0; i < n; i++) printf("%d%s", a[i], i == n -1 ? "\n" : " "); return 0; }