(純數字與物件排序,注意物件排序邊界問題)
理解:將陣列中的元素大於某個值的放在右邊,小於某個值的放再左邊。然後遞迴,直到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 左...
快速排序理解
每次處理好 某個 標桿 數字 在 最終 陣列 中的位置。然後 每個 數字 依次 作為標桿數,都找到 自己的 位置。相比 氣泡排序,冒泡 是每次找 最大數字的 位置,找好後 在 不包含最大 數字的 陣列中,再 次找 當前最大數的 位置。而快速 排序 是 找 指定 標桿數 的位置。標桿數 可以是任意乙個...