快速排序的理解

2021-09-24 10:29:54 字數 1633 閱讀 9103

(純數字與物件排序,注意物件排序邊界問題)

理解:將陣列中的元素大於某個值的放在右邊,小於某個值的放再左邊。然後遞迴,直到low>=high在返回。

在快速排序中,首先要將第乙個元素作為key值(其他從某位起就某位做key值也可),前面設定left為第乙個元素的索引,right為最後乙個元素的索引。一直high–,直到當key值大於high索引的元素時,將high索引對應的元素賦值到low對應的元素;然後原來那個元素不管,不動,然後將low++,直到當key值小於low索引對應的元素時,將low索引對應的元素賦值到high對應的元素,以此反覆運算,到計算完為止。

**:純數字排序

public

class

quick

;quick

(a,0,5

);for(

int i =

0; i <

6; i++)}

public

static

void

quick

(int

b,int left,

int right)

while

(high > low)

b[low]

= b[high]

;while

(key >= b[low]

&& low < high)

b[high]

= b[low];}

b[low]

= key;

//因為所有元素的位置都已經調換覆蓋了,只剩這個需要key把最初的值賦給它

quick

(b, left, low-1)

;quick

(b, low+

1, right);}

}

物件根據某一屬性排序

package com.tc.sort;

public

class

quicksort

;quick

(p,0,5

);for(

int i =

0; i <

6; i++)}

public

static

void

quick

(person[

] p,

int left,

int right)

while

(high > low)

p[low]

= p[high]

;while

(key >= p[low]

.getage()

&& low < high)

p[high]

= p[low];}

p[low]

= keyperson;

//因為所有元素的位置都已經調換覆蓋了,只剩這個需要key把最初的值賦給它

//注意邊界問題,否則可能會出現一些越界,或空指標錯誤

if(low >1)

if(low < p.length-1)

}}class

person

public

void

setage

(int age)

}

快速排序的理解

快速排序是對氣泡排序的一種改進。它的基本思想是通過一趟掃瞄後,使得排序序列的長度能大幅度地減少。通過一趟掃瞄,確保以某個數為基準點的左邊各數都比它小,右邊各數都比它大。然後又用同樣的方法處理它左右兩邊的數,直到基準點的左右只有乙個元素為止。簡單的說就是 找乙個基準數 待排序的任意數,一般都是選定首元...

快速排序理解

include include stdafx.h define n 7 void print2 int a printf n void sort int data,int left,int right int i left int j right int key data i while i j 左...

快速排序理解

每次處理好 某個 標桿 數字 在 最終 陣列 中的位置。然後 每個 數字 依次 作為標桿數,都找到 自己的 位置。相比 氣泡排序,冒泡 是每次找 最大數字的 位置,找好後 在 不包含最大 數字的 陣列中,再 次找 當前最大數的 位置。而快速 排序 是 找 指定 標桿數 的位置。標桿數 可以是任意乙個...