標籤:
下面的動畫展示了快速排序演算法的工作原理。
快速排序圖示:可以圖中在每次的比較選取的key元素為序列最後的元素。
#include <stdio.h>#include <stdlib.h> void swap(int * x, int * y){ int tmp = *x; *x = *y; *y = tmp;}void printlist(int list[],int n){ int i; for(i=0;i<n;i++) printf("%d\t",list[i]); printf("\n");}void quickSort(int* A, int start , int end){ if(A == NULL || start >= end) return; int key = A[start]; int left = start + 1; int right = end; while(left <= right)//×¢ÒâµÈºÅ { while(A[left] <= key && left <= right)//×¢ÒâµÈºÅ left ++; while(A[right] > key && left <= right)//×¢ÒâµÈºÅ right --; if(left < right) { //printf("swap %d & %d\n", A[left], A[right]); swap(&A[left], &A[right]); left++; right--; } } //printlist(A, end - start + 1); //printf("left %d righ %d\n", left, right); swap(&A[start], &A[right]); quickSort(A, start, left - 1); quickSort(A, left + 1, end);}void main(){ const int MAX_ELEMENTS = 10; int list[MAX_ELEMENTS]; int i = 0; // ²úÉúÌî³äÐòÁеÄËæ»úÊý for(i = 0; i < MAX_ELEMENTS; i++ ){ list[i] = rand()%100; } printf("½øÐÐÅÅÐò֮ǰµÄÐòÁÐ:\n"); printlist(list,MAX_ELEMENTS); // sort the list using quicksort quickSort(list,0,MAX_ELEMENTS-1); // print the result printf("ʹÓÿìËÙÅÅÐòËã·¨½øÐÐÅÅÐòÖ®ºóµÄÐòÁÐ:\n"); printlist(list,MAX_ELEMENTS);}
C/C++ 快速排序 quickSort