八大排序算法 之 快速排序(填坑法)

排序思想:

1,將第一個數字作爲基準數字,將數組分爲左右兩部分,左邊是比它小的數字,右邊是比它大的數字;

2,將左部分按照上面的思想再次進行劃分成兩部分,依次類推;

3,將右部分按照上面的思想再次進行劃分成兩部分,依次類推;

排序趟數:

不確定

排序原理:

填坑法:

1,將第一個數字作爲基準數字拿出,留下一個坑,從數組的最後開始往前循環,發現比基準數字小的就把它填到之前留下的坑裏,從而在右側得到一個新坑;

2,再從數組的頭部開始循環查找,發現比基準數字大的,就將它填到之前後面數字被拿走留下的坑裏,從而在左側得到一個新坑;

3,如此往復,知道中間部位,將基準數字放到中間,完成一輪循環

參考圖片:


代碼實現如下:

//快速排序主方法
	public static void quickSort(int[] array, int low, int high){
		if (low < high) {
			int mid = findMid(array, low, high);//將第一個數作爲基準,將數組分成前後兩部分
			quickSort(array, low, mid - 1);//遞歸調用將左半部分再一次往下分,直至左半部分完成排序
			quickSort(array, mid + 1, high);//遞歸調用將右半部分再一次往下分,直至右半部分完成排序
		}
	}
	//將第一個數作爲基準,將數組分成前後兩部分--填坑法
	public static int findMid(int[] array, int low, int high){
		int temp = array[low];//將第一個數作爲基準拿出,拿出留下一個坑
		while (low < high) {
			while (low < high && temp <= array[high]) {//從右開始找
				high --;
			}
			if (low < high) {//發現比基準數字小的,就把它填到之前基準數字留下的坑裏
				array[low ++] = array[high];
			}
			
			while (low < high && temp >= array[low]) {//從左開始找
				low ++;
			}
			if (low < high) {//發現比基準數字大的,就把它填到之前被拿出數字留下的坑裏
				array[high --] = array[low];
			}
		}
		array[low] = temp;//將基準數字放到中間將左右分成兩部分
		return low;//返回基準數字的下標
	}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章