1. 程式人生 > >小白眼裏的快速排序

小白眼裏的快速排序

我們 操作 target 其余 java mage 右移 inf light

1.快速排序的基本思想

1.從數組中選取一個數為基準數,一般是選取第一個為基準數

2.其余數據和這個基準數進行比較,大的放一邊,小的放在另一邊

3.基準數兩邊的數組再重復上述操作

2.以例為證

1.初始化數組如下

技術分享圖片

2.然後進行替換

過程如下:

(1)對數組進行從小到大排列,現在我們選取第一個數17為基準數,從最右邊開始比(這裏一定要從最右邊開始,要不自己試試會怎樣),右邊第一個數是14小於17,所以索引保持在14的位置準備替換,然後從左往右找3小於17不用替換,索引向右移動一位,發現62大於17,停止查找並和之前的14替換,第一次替換結果如下。

第一對數據替換後結果

技術分享圖片

(2)現在進行第二對數據替換,62所在索引向左移動一位,發現值為1,小於17,停止查找並等待替換,4所在索引向右移動一位,值為4小於17,繼續向右移動一位,值為56大於17,和之前的1進行替換,第二次替換的結果如下。

第二對數據替換後結果

技術分享圖片

(3)第三對數據替換後結果

技術分享圖片

(4)繼續移動右側索引,發現右側索和左側索引重合了,到達了13的位置,這時就用13和基準數進行交換。

第四對數據替換之後

技術分享圖片

(5)然後17左邊為一個數組,17右邊為一個數組,分別執行上述操作,最後結果如下:

技術分享圖片

3.上代碼

private static void quickSort(int arr[],int low,int high) {
		int l = low;
		int h = high;
		int target = arr[low];

		while (l < h) {
			while (l < h && arr[h] >= target)
				h--;
			if (l < h) {
				int temp = arr[h];
				arr[h] = arr[l];
				arr[l] = temp;
				l++;
			}
			while (l < h && arr[l] <= target)
				l++;
			if (l < h) {
				int temp = arr[h];
				arr[h] = arr[l];
				arr[l] = temp;
				h--;
			}
		}
		
		if (l > low)
			quickSort(arr, low, l - 1);
		if (h < high)
			quickSort(arr, l + 1, high);
}

  

  

小白眼裏的快速排序