C語言筆記17--快速排序簡單實現
阿新 • • 發佈:2018-11-17
快速排序(QuickSort)是一種排序演算法,並且非常的實用。快速排序的原理是先找一個基準值,然後和序列的每個值比較,大於基準值的放在基準值右邊,小於基準值的放在左邊。那麼陣列將會被分割成兩組,左邊的是小於基準值的,右邊是大於基準值的,那就是說基準值的位置已經確定。然後分別為這兩組找基準值進行分割,經過遞迴後,陣列的元素位置都會確定。
#include<stdio.h> #include<stdlib.h> #define M 10//作為陣列的長度 //列印陣列 void printfarray(int *p,int len) { for(int *temp=p;temp<p+len;temp++) { printf("%3d",*temp); } printf("\n"); } //交換兩個值 void swap(int *pa,int *pb) { int temp=*pa; *pa=*pb; *pb=temp; } void quicksort(int *p,int left,int right) { int i=left;//副本 int j=right;//副本 if(i<j)//i要小於j { while(i<j) { while(p[left]>p[i])//p[left]作為基準值 { i++;//從左往右,直到找到有大於基準值的退出迴圈 } while(p[left]<=p[j]) { j--;//從右往左,直到找到有小於基準值 } swap(&p[i],&p[j]);//交換兩者 } //當i不小於j時,剛好把陣列遍歷了一次,找到了第一個基準值的位置 //p[j]作為新的基準值,此時的p[left]值位置已經確定 swap(&p[left],&p[j]); quicksort(p,left,j-1);//p[j]值已經確定位置 quicksort(p,j+1,right); } } void main() { int a[M]={ 35, 23, 45, 66, 78, 30, 14, 8, 54, 15};//隨機寫的陣列 printfarray(a,M); quicksort(a,0,M-1); printfarray(a,M); system("pause"); }