快速排序的遞歸和非遞歸
阿新 • • 發佈:2018-10-06
tails 三次 sort 大於 速度 amp 定義 二次 進行
快速排序,顧名思義,是一種速度快,效率高的排序算法。
- 快排原理:
1定義i=0,j=A.lenght-1,i為第一個數的下標,j為最後一個數下標
2從數組的最後一個數Aj從右往左找,找到第一小於key的數,記為Aj;
3從數組的第一個數Ai 從左往右找,找到第一個大於key的數,記為Ai;
4交換Ai 和Aj
5重復這個過程,直到 i=j 6調整key的位置,把A[i] 和key交換 假設要排的數組為:A[8] ={ 5 2 8 9 2 3 4 9 }: 選擇 key = 5, 開始時 i=0,j=7 index 0 1 2 3 4 5 6 7 開始: 5 2 8 9 2 3 4 9 i j 第一次找 5 2 8 9 2 3 4 9 i j 交換: 5 2 4 9 2 3 8 9 i j 第二次找 5 2 4 9 2 3 8 9 i j 交換: 5 2 4 3 2 9 8 9 i j 第三次找 5 2 4 3 2 9 8 9 ij 調整key: 2 5 4 3 5 9 8 9 ij--------------------- 本文來自 Yexiaofen 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/Yexiaofen/article/details/78018204?utm_source=copy
遞歸:
void quick_sort(int m[],int l,int r){ int i=l,j=r; int x=m[i]; if(l<r){ while (i<j) {//一次不行,進行多次 while (i < j && m[j] >= x)//從右向左,找比x小的 j--; if (i < j) { m[i] = m[j]; i++; } while (i < j && m[i] <= x)//從左向右,找比x大的 i++; if (i < j) { m[j] = m[i]; j--; } m[i] = x; } quick_sort(m,l,i-1);//遞歸調用 quick_sort(m,i+1,r); } }
快速排序的遞歸和非遞歸