上篇講了插入排序本篇講交換排序,所謂交換排序便是根據序列中倆個元素關鍵字的比較結果來對換這倆個記錄在序列中的位置。
各排序算法的比較:
二、交換排序
2.1冒泡排序
package sort;
public class BubbleSort {
public BubbleSort(int[] a){
boolean falg ;
for(int i=0;i<a.length-1;i++){
falg = false; //表示本趟排序是否發生過的標誌
for(int j=a.length-1;j>i;j--){ //一趟冒泡的過程
if(a[j]<a[j-1]){ //若爲逆序
int temp = a[j]; //交換
a[j]=a[j-1];
a[j-1]=temp;
falg = true;
}
}
if(!falg) return ; //本趟遍歷後未發生交換,則爲有序
}
}
private void print(int[] a){
for(int i=0;i<a.length;i++){
System.out.print(a[i]+",");
}
}
public static void main(String[] args){
int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35};
BubbleSort bu = new BubbleSort(a);
bu.print(a);
}
}
2.2快速排序
package sort;
public class QuickSort {
public void QuickedSort(int[] a,int low,int high){
if(low<high){ //遞歸跳出的條件
int pivotpos = Partition(a,low,high); //將表劃分爲滿足上述條件的倆個子表
QuickedSort(a,low,pivotpos-1); //依次對倆個子表進行遞歸排序
QuickedSort(a,pivotpos+1,high);
}
}
private int Partition(int[] a, int low, int high) {
int pivot = a[low]; //將當前表的第一個元素設爲樞紐值對錶進行劃分
while(low<high){
while(low<high&&a[high]>=pivot) high--;
a[low]=a[high]; //比樞紐小的值移動到左邊
while(low<high&&a[low]<=pivot) low++;
a[high]=a[low]; //比樞紐大的值移動到右邊
}
a[low]=pivot; //樞紐元素存放到最終位置
return low; //返回存放樞紐的最終位置
}
private void print(int[] a){
for(int i=0;i<a.length;i++){
System.out.print(a[i]+",");
}
}
public static void main(String[] args){
int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35};
QuickSort quicksort = new QuickSort();
quicksort.QuickedSort(a,0,a.length-1);
quicksort.print(a);
}
}