快速排序是一種劃分交換排序,也就是分而治之。
具體思想為:
選取數列的乙個值作為基準數在數列中進行比較,把所有比基準數小的值放在基準數的左邊,所有比基準數大的值放在基準數的右邊將基準數的左右區間部分重複以上步驟,直到區間中只剩乙個數
接下來的步驟可以理解為挖坑填坑的操作:
i指向陣列第乙個元素,j指向陣列最後乙個元素。取陣列第乙個元素作為基準數 temp =a[i];(此時a[i]中的值從坑中被取走)
然後從陣列右邊開始,當arr[j] >= temp時,j左移即j–,直到arr[j] < temp時,用arr[j]的數值把剛剛取走的第乙個元素a[i]的坑填上,即arr[i] = arr[j];然後i++;接下來,再從陣列左邊開始,當arr[i] <= temp時,i右移即i++;直到arr[i] >= temp,之後arr[j] = arr[i];即填坑,然後j–;重複上述步驟直到i==j,將基準數填入就可以了。
當步驟完成後,再將基準數左右兩邊遞迴即可。
下面通過**解析
private int quicksort(int left, int right, int arr)
if(i < j)
while (i < j && arr[i] <= temp)
if(i < j)
}arr[i] = temp;
quicksort(0, i-1, arr);
quicksort(i+1, right, arr);
} return arr;
}
快速排序 學習記錄
快速排序的基本思想是 這裡將第乙個位置作為切分點,因此還需要返回切分點的具體位置 實現 public static void sort int arr,int low,int high private static intpartition int arr,int low,int high 此時指標...
C 快速排序 隨機快速排序 學習記錄
都是網上的資源,侵刪。快速排序演算法以及其他演算法的時間以及空間複雜度 我認為比較好理解的思路 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 再對左右區間重複第二步,直到各區間只有乙個數。坑填數1 i l j r 將基準數挖出...
記錄自已學習之排序演算法 快速排序
最近因為自已在做乙個小專案,深深的認識到自已的演算法真的是差極了,於是最近就開始看一點關於排序的演算法開始入門。首先第一種就是快速排序,快速排序起名就是源於它比較快的就能得出順序。下面我來說一下快速排序的原理 首先需要選擇乙個數作為對比 一般選擇的是陣列的第乙個數 然後有乙個指向陣列頭的數left,...