2019年java中高級java面試題(八)數據結構與算法

1、快速排序

會把數組中的一個數當做基準數,一般把數組中最左邊得數當做基準數。然後從兩邊開始檢索。先從右邊檢索比基準數小的,再從左邊檢索比基準數大的。如果檢索到了,九停下,然後交換這兩個元素。然後再繼續檢索。

一旦相遇停止檢索,交換基準數和相遇位置的元素。

先排基準數左邊再排右邊

package com.hzau.itdog;

import java.util.Arrays;

public class Test {

	public static void main(String[] args) {
		int[] arr= {6,3,8,10,9,85,2,1,120,654654};
		quickSort(arr,0,arr.length-1);
		System.out.println(Arrays.toString(arr));

	}

	public static void quickSort(int[]arr,int left,int right) {
		//左邊索引不能大於右邊索引
		if(left>right) {
			return;
		}
		//定義基準數
		int base=arr[left];
		//左邊
		int i=left;
		//右邊
		int j=right;
		//i和j不相遇在循環中檢索
		while(i!=j) {
			//j先從右往左檢索比基準數小的就停下
			//比基準數大繼續檢索
			while(arr[j]>=base &&i<j) {
				j--;
			}
			//找到比基準數小
			//i從左往右
			while(arr[i]<=base &&i<j) {
				i++;
			}
			//交換i和j位置的元素
			int temp=arr[i];
			arr[i]=arr[j];
			arr[j]=temp;
		}
		//i和j相遇交換基準數和相遇位置元素
		arr[left]=arr[i];
		arr[i]=base;
		//基準數左邊比基準數小,右邊比基準數大
		//排左邊
		quickSort(arr,left,i-1);
		//排右邊
		quickSort(arr,i+1,right);
	}
}

 

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