氣泡排序:廢話不多說,直接上**,注意2中冒泡方法的不同。
* user: sqtds
* date: 13-1-15
* time: 下午3:03
*/public
class bubble }}
}public
static
void swap(int array , int left , int right)
public
static
void bubblesort(int array)
if(!exchange) //本趟排序未發生交換,提前終止演算法
return;
} //endfor(外迴圈)
} //bubblesort
public
static
void main(string args);
//sort(array);
bubblesort(array);
for(int i: array)}}
(1)初始
r[1..n]為無序區。
(2)第一趟掃瞄
從無序區底部向上依次比較相鄰的兩個氣泡的重量,若發現輕者在下、重者在上,則交換二者的位置。即依次比較(r[n],r[n-1]),(r[n-1],r[n-2]),…,(r[2],r[1]);對於每對氣泡(r[j+1],r[j]),若r[j+1].key快速排序:
(1) 分治法的基本思想
分治法的基本思想是:將原問題分解為若干個規模更小但結構與原問題相似的子問題。遞迴地解這些子問題,然後將這些子問題的解組合為原問題的解。
(2)快速排序的基本思想
設當前待排序的無序區為r[low..high],利用分治法可將快速排序的基本思想描述為:
①分解:
在r[low..high]中任選乙個記錄作為基準(pivot),以此基準將當前無序區劃分為左、右兩個較小的子區間r[low..pivotpos-1)和r[pivotpos+1..high],並使左邊子區間中所有記錄的關鍵字均小於等於基準記錄(不妨記為pivot)的關鍵字pivot.key,右邊的子區間中所有記錄的關鍵字均大於等於pivot.key,而基準記錄pivot則位於正確的位置(pivotpos)上,它無須參加後續的排序。
注意:劃分的關鍵是要求出基準記錄所在的位置pivotpos。劃分的結果可以簡單地表示為(注意pivot=r[pivotpos]):
r[low..pivotpos-1].keys≤r[pivotpos].key≤r[pivotpos+1..high].keys
其中low≤pivotpos≤high。
②求解:
通過遞迴呼叫快速排序對左、右子區間r[low..pivotpos-1]和r[pivotpos+1..high]快速排序。
③組合:
因為當"求解"步驟中的兩個遞迴呼叫結束時,其左、右兩個子區間已有序。對快速排序而言,"組合"步驟無須做什麼,可看作是空操作。
* user: sqtds
* date: 13-1-14
* time: 上午10:38
*/public
class quicksort
i++;}}
for(int a:array)
system.out.println("");
quciksort(array, point+1 ,right);
quciksort(array, left ,point-1);}}
public
static
void swap(int array,int x, int y)
public
static
int partition(int array,int left, int right)
public
static
void quicksort(int array, int left, int right)
}public
static
void main(string args);
/*** 4,6,2,5,1,7,5,4,3,2 ,i=1,j=1,p=0
* 4,6,2,5,1,7,5,4,3,2,i=1,j=2,p=0
* 2,6,4,5,1,7,5,4,3,2,i=2,j=3,p=0
* 2,6,4,5,1,7,5,4,3,2,i=2,j=4,p=0
* ...
*交換i和p
*/quciksort(array,0,array.length-1);
//quicksort(array,0,array.length-1);
for(int a:array)}}
//並返回基準記錄的位置
recetype pivot=r[i]; //用區間的第1個記錄作為基準 '
while(i//從區間兩端交替向中間掃瞄,直至i=j為止
while(i=pivot.key) //pivot相當於在位置i上
j--; //從右向左掃瞄,查詢第1個關鍵字小於pivot.key的記錄r[j]
if(i//表示找到的r[j]的關鍵字
r[i++]=r[j]; //相當於交換r[i]和r[j],交換後i指標加1
while(i//pivot相當於在位置j上
i++; //從左向右掃瞄,查詢第1個關鍵字大於pivot.key的記錄r[i]
if(i//表示找到了r[i],使r[i].key>pivot.key
r[j--]=r[i]; //相當於交換r[i]和r[j],交換後j指標減1
} //endwhile
r[i]=pivot; //基準記錄已被最後定位
return i;
} //partition
交換排序 氣泡排序與快速排序
氣泡排序 基本思想 每次比較兩個相鄰的元素,如果它們的順序錯誤就把它們交換過來。核心 for i 1 i n 1 i 快速排序 交換 快速排序 include int a 101 n void quicksort int left,int right 將基準數歸位 a left a i a i te...
交換排序(氣泡排序與快速排序)
1 氣泡排序 2void bubblesort int array,int n 316 17 18 快速排序動態圖 1 快速排序01 2void insertsort int array,int left,int right 315 swap array i array j 將比樞軸移小的資料移至低...
交換排序 氣泡排序,快速排序
交換排序 氣泡排序,快速排序 執行環境 vs2010 include include include include define ok 1 define true 1 define false 0 define maxsize 50 typedef struct redtype typedef s...