快速排序範例程式,C語言實現的詳細如下:
#include <stdio.h> #include <stdbool.h> #define MAX 7 int intArray[MAX] = {4,6,3,2,1,9,7}; void printline(int count){ int i; for(i = 0;i <count-1;i++){ printf("="); } printf("=\n"); } void display(){ int i; printf("["); // navigate through all items for(i = 0;i<MAX;i++){ printf("%d ",intArray[i]); } printf("]\n"); } void swap(int num1, int num2){ int temp = intArray[num1]; intArray[num1] = intArray[num2]; intArray[num2] = temp; } int partition(int left, int right, int pivot){ int leftTutorialser = left -1; int rightTutorialser = right; while(true){ while(intArray[++leftTutorialser] < pivot){ //do nothing } while(rightTutorialser > 0 && intArray[--rightTutorialser] > pivot){ //do nothing } if(leftTutorialser >= rightTutorialser){ break; }else{ printf(" item swapped :%d,%d\n", intArray[leftTutorialser],intArray[rightTutorialser]); swap(leftTutorialser,rightTutorialser); } } printf(" pivot swapped :%d,%d\n", intArray[leftTutorialser],intArray[right]); swap(leftTutorialser,right); printf("Updated Array: "); display(); return leftTutorialser; } void quickSort(int left, int right){ if(right-left <= 0){ return; }else{ int pivot = intArray[right]; int partitionTutorials = partition(left, right, pivot); quickSort(left,partitionTutorials-1); quickSort(partitionTutorials+1,right); } } main(){ printf("Input Array: "); display(); printline(50); quickSort(0,MAX-1); printf("Output Array: "); display(); printline(50); }
如果我們編譯並執行上述程式,那麼這將產生以下結果 -
Input Array: [4 6 3 2 1 9 7 ] ================================================== pivot swapped :9,7 Updated Array: [4 6 3 2 1 7 9 ] pivot swapped :4,1 Updated Array: [1 6 3 2 4 7 9 ] item swapped :6,2 pivot swapped :6,4 Updated Array: [1 2 3 4 6 7 9 ] pivot swapped :3,3 Updated Array: [1 2 3 4 6 7 9 ] Output Array: [1 2 3 4 6 7 9 ] ==================================================