排序 快速排序

2022-07-13 18:42:17 字數 1268 閱讀 8923

快速排序和氣泡排序都是採用交換法,與冒泡不同的是,快速排序還採用分治法:通過選定乙個「基點(可隨機選擇)」,將小於基點的元素放在基點左側,大於基點的放在右側,然後用遞迴對基點兩側的元素再排序

雙邊迴圈法:

//

目標:排序陣列內元素

int arr=;

public

static

void quicksort(int arr,int startindex,int

endindex)

int pivotindex=singlepartition(arr,startindex,endindex);

quicksort(arr,startindex,pivotindex-1);

quicksort(arr,startindex+1, endindex);

}

public

static

int partition(int arr,int startindex,int

endindex)

while (left//

尋找左邊開始大於基點的,找不到就後移,直到找到跳出

left++;

}if (left//

跳出後執行交換,這就把左邊大的轉移到了右邊,右邊小的轉移到了左邊

int p=arr[left];

arr[left]=arr[right];

arr[right]=p;}}

//當left==right時,交換left指向的元素和基點的位置

arr[startindex]=arr[left];

arr[left]=pivot;

return left; //

這裡返回的left主要時為了確定左右遞迴時的結束位置和開始位置

}

public

static

int singlepartition(int arr,int startindex,int

endindex)

}//遍歷完成,mark和基準元素交換位置

arr[startindex]=arr[mark];

arr[mark]=pivot;

return

mark;

}

o(nlogn)

排序 快速排序

快速排序時實踐中最快的一直排序,平均時間是0 nlogn 最壞的情況是o n2 但是很容易將這種情況避免 空間複雜度 o n lgn 不穩定。快速排序時基於分治模式處理的,對乙個典型子陣列a p.r 排序的分治過程為三個步驟 1.分解 a p.r 被劃分為倆個 可能空 的子陣列a p q 1 和a ...

排序 快速排序

定義 在快速排序演算法中,使用了分治策略,將要排序的序列分成兩個子串行,然後遞迴地對子序列進行排序,直到整個序列排序完畢。步驟 1.在序列中選擇乙個關鍵元素作為軸 2.對序列進行重新排序,將比軸小的元素移到軸的前邊,比軸大的元素移動到軸的後面。在進行劃分之後,軸便在它最終的位置上 3.遞迴地對兩個子...

排序 快速排序

時間複雜度 快速排序每次將待排序陣列分為兩個部分 1 在理想狀況下,每一次都將待排序陣列劃分成等長兩個部分,則需要logn次劃分。2 在最壞情況下,即陣列已經有序或大致有序的情況下,每次劃分只能減少乙個元素,快速排序將不幸退化為氣泡排序,最壞情況為o n 2 快速排序的平均時間複雜度為o nlogn...