在部落格上面看了很多大神的解析,自己慢慢的有了一點思路。
首先我認為快速排序就是採用了分治的思想 ,先找到其中乙個數字作為基準,一般是第乙個,然後找到它在這一組序列中間對應的真正位置,然後以這個數字為分界分為兩組在分別採用一開始找第乙個數字真正位置的方法,分別找到這兩組對應的第乙個數字的位置,然後再分,就這樣一直分下去,直到所有的數字找到它們對應的真正位置,舉個例子
1, 5, 1, 2, 0, 4, 9這幾個數字,一開始是以第乙個數字1為基準的,然後用兩個變數low和high代表第乙個數字和最後乙個數字的位置
從末尾看,如果基準小於high所代表數字的大小,high減一,反之,用high位置對應的值替代low所代表的位置的值。再看頭,如果基準值大於low所代表的值那麼low加一,反之,用low位置所代表的值替代high位置所代表的位置的值,最後low和high相等的時候這個位置就是基準值也就是1的真正位置,基準位置如下變化
1 5 1 2 0 4 9
0 1 1 2 5 4 9
0 1 1 2 5 4 9
0 1 1 2 4 5 9
簡單說明,左邊一開始就有序了就不需要在確定基準了
最後貼上我的**
public class quicklysort ;
quicklysort(a, 0, a.length - 1);
system.out.print("排序後為:");
for (int i : a)
}public static void quicklysort(int a, int low, int high)
int temp = a[low];//把初始值當做基準
int lower = low;
int higher = high;
/*** 尋找基準的真正位置
*/while(lower < higher)
/*** high點對應值小於基準值就把high值給low點對應的值
*/a[lower] = a[higher];
/*** low點同理可得
*/while(lower < higher && temp >= a[lower])
a[higher] = a[lower];
}//此時對應的low和high應該相等,把基準值放入它正在對應的位置上面
a[lower] = temp;
/*** 分別對前半部分和後半部分進行遞迴尋找新的基準
*/quicklysort(a, low, lower - 1);
quicklysort(a, lower + 1, high);}}
關於快速排序演算法的理解
直接進入正題吧,快排演算法的思想主要是分兩步 1.使用空間複雜度為1的方法將一堆數中的某個元素找到自己的位置,並且保證左邊的數比自己小 大 右邊的數比自己大 小 2.將這個堆數左邊所有的數再次當做那堆數放到上面1的方法中,重複,直到代入的這堆數完全有序,完成之後再將將右邊所有的數當做那堆數放到上面的...
java中的快速排序
我們先來舉列子了解一下快速排序 如圖,我們以隊伍第乙個元素為基準,然後我們從後面找比基準大的值後,將他的值 放到基準的位置 注意 原位置還是他的值 一次後 第二次 第三次 第四次 最後一次 當兩邊的指標重合時,將基準放的那個位置,然後一次快速排序結束,結束後的結果是,基準左側,全是比他小的,基準右側...
平平無奇關於快速排序的理解
早就聽說過快速排序是一種很優秀,很常用的排序演算法。但是有多少人和筆者一樣只聞其名卻不知其所以然呢?經過一定的學習之後筆者對快速排序有了一定的了解,今天就來捋一捋快速排序的演算法脈絡。快速排序最核心的思想就是 找到基準值的位置 第一步 選擇乙個值作為基準值,我們一般使用陣列的第乙個值作為基準值。第二...