快速排序法

一.快速排序法

       快速排序法建立在冒泡排序之上,對其進行了優化處理。同冒泡排序法,快速排序也是交換元素的位置。冒泡排序法每次將一個元素冒泡在數列的一端,因此效率過慢,其時間複雜度O(n^2)。

快速排序法原理爲:採取了遞歸了思想,選取一個基點元素,每一輪排序將小於/大於基點數值的數放在基點位置左邊,將大於/小於基點數值的數放在基點元素右邊。每一輪後,基點的位置將不會

改變。利用分割思想,將基點兩邊的元素看作兩個子數列,再次進行排序,直到排序完成。 原理圖如下

二.代碼分析於實現

  代碼分析:將數列開始元素作爲基點元素pivot,用index表示基點位置,用left和right作爲遍歷指針元素,將數列按照從小到大排序。從指針right開始,把指針指向的元素與基點元素比較,如果

比pivot大,則指針左移;如果比pivot小,則把right指向元素填入index位置中。同理,left指針指向的元素小於pivot則left指針向右移動,如果left指針指向的元素大於pivot

則將left指向元素填入index位置中。最後left與right將會重合,此時index位置的元素將是最後一個需要交換位置的數值的值,將index位置的數值重新賦值爲pivot。over代碼實現:

import java.util.Arrays;


public class Sort {
	public static void main(String arg[]){
		int[] arr={4,7,6,3,2,8,4,5};
		quickSort(arr, 0, arr.length-1);
		System.out.println(Arrays.toString(arr));	
	}
	public static void quickSort(int[] arr ,int startIndex,int endIndex)
	{
		if(startIndex>=endIndex)
		{
			return 0;
		}
		int pivotIndex=partition(arr,startIndexendIndex);
		quickSort(arr, startIndex, pivotIndex-1);
		quickSort(arr, pivotIndex+1, endIndex);//-1 & +1分割數列
	}
	
	private static int partition(int[] arr,int startIndex,int end_Index)
	{
		int pivot=arr[startIndex];
		int left=startIndex;
		int right=endIndex;
		int index=startINdex;
		while(right>=left){
			while(right>=left){
				if(arr[right]<pivot){
					arr[left]=arr[right];
					index=right;
					left++;
					break;
					
				}
				right--;
			}	
			while(right>=left){
				
					if(arr[left]>pivot){
						arr[right]=arr[left];
						index=left;
						right--;
						break;
					}
					
				left++;
			}	
		}
		arr[index]=pivot;
		return index;	
	}
}

三.總結 

      快速排序法的時間複雜度時多大呢?值得思考,它是隨着數列元素初始排布的不同改變呢,還是不變?當然它是前者。

 -----------------------趁年輕,多努力------------------------------

 

 

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