基礎演算法學習——快速排序
阿新 • • 發佈:2018-12-11
快速排序是分治法的典型應用,它的大概的一個實現思路是:任意去一個數,將比它大的數放在該數右邊,比它小的數放在它左邊(反過來也行)。然後又將左右兩邊的數進行該操作,直到只剩下一個數了,也就不用排序了。我們看下程式碼:
#include<stdio.h> //這裡交換值 void swap(int &a,int &b) { int temp; temp=a; a=b; b=temp; } //快排函式 void QuickSort(int a[],int left,int right) { int key,i,j; //我們讓這個關鍵數為最左邊的數 key=a[left]; i=left;j=right; //當只有一個數時不用排了 if(left>=right) return; while(i!=j) { while(j>i&&a[j]>key) j--; swap(a[i],a[j]); while(j>i&&a[i]<key) i++; swap(a[i],a[j]); } QuickSort(a,left,i-1); QuickSort(a,i+1,right); } int main() { int i; int a[]={2,5,8,4,69,31,94,82,76}; QuickSort(a,0,8); for(i=0;i<9;i++) printf("%d ",a[i]); return 0; }