你對排序算法知多少?冒泡排序-選擇排序-快速排序-算法實現介紹

話不多說,上幾種排序算法代碼實現:冒泡排序,選擇排序,快速排序

class DataPaiXu

{

/*--------------------------------------------------

功能: 冒泡排序

參數說明

第一個: a[]要排序的數組

第二個: 數組的長度

返回值: 無

特別說明:

數組元素大小按升序排列

排序好之後的數組還是a[]

----------------------------------------------------*/

static void bubble_sort(int a[],int iLength)

{

int i,j;

for(j=0;j<ilength-1>

{

for(i=0;i<ilength-1-j>

{

if(a[i]>a[i+1])

{

/*交換a[i] 與a[i+1] 的數據*/

a[i] = a[i]^a[i+1];

a[i+1] = a[i]^a[i+1];

a[i]= a[i]^a[i+1];

}

}

}

}

/*--------------------------------------------------

功能: 選擇排序

參數說明

第一個: a[]要排序的數組

第二個: 數組的長度

返回值: 無

特別說明:

數組元素大小按升序排列

排序好之後的數組還是a[]

----------------------------------------------------*/

static void select_sort(int a[], int iLength)

{

int i, j, min;

for( i =0; i < iLength -1; i ++)

{

min = i; /*首先假設第一個是最小值*/

for( j = i +1; j < iLength; j ++)

{

if( a[min] > a[j])

min = j;

}

//交換

if(min != i)

{

a[min] = a[min]^a[i];

a[i] = a[min]^a[i];

a[min] = a[min]^a[i];

}

}

}

/*

函數功能:把數組中所有比a[low]小的數字放在左邊,

把數組中所有比a[low]大的數字放在右邊,

最後返回a[low]值在數組中的位置

*/

static int partions(int a[],int low,int high)

{

int low_value=a[low];

while (low<high>

{

/*先從高位置查找,直到找出一個比low_value小的數字才退出while循環*/

while (low<high>=low_value)/<high>

--high;

/*找到之後,放在此時low的位置上,大家注意這個時候high位置上的數據

是沒有意義的,因為它已經放在low位置上去了,

下面的代碼會把high位置上數據退換為一個有意義的數字的*/

a[low]=a[high];

/*再從低位置查找,直到找出一個比low_value大的數字才退出while循環*/

while (low<high>

++low;

/*把找到的數字放到數組high的位置上,

這個時候high位置上的數字是有意義的,

那麼這個時候low位置上的數據是沒有意義的,因為它的值放在了high上了*/

a[high]=a[low];

}

/*把值放在low位置上,使得low位置上的數據有意義,

從而整個數組上的每個數字都是有意義的*/

a[low]=low_value;

return low;

}


static void qsort(int a[],int low,int high)

{

int prvotloc;

if(low<high>

{

prvotloc=partions(a,low,high);

qsort(a,low,prvotloc-1); //遞歸調用排序 由low 到prvotloc-1

qsort(a,prvotloc+1,high); //遞歸調用排序 由 prvotloc+1到 high

}

}

/*--------------------------------------------------

功能: 快速排序

參數說明

第一個: a[]要排序的數組

第二個: 數組的長度

返回值: 無

特別說明:

數組元素大小按升序排列

排序好之後的數組還是a[]

----------------------------------------------------*/

static void quicksort(int a[],int n)

{

qsort(a,0,n-1);

}

}

public class Test001 {

public static void main(String[] args)

{

int number[]={50,45,15,78,84,51,24,12,9};

int i;

DataPaiXu paixu = new DataPaiXu();

//執行冒泡排序

paixu.bubble_sort(number,number.length);

//執行選擇排序

//paixu.select_sort(number,number.length);

//執行快速排序

//paixu.quicksort(number,number.length);

for(i=0;i<number.length>

{

System.out.printf("%d ",number[i]);

}

System.out.printf("\\n");

}

}

"/<number.length>

/<high>

/<high>

/<high>

/<ilength-1-j>

/<ilength-1>


分享到:


相關文章: