你对排序算法知多少?冒泡排序-选择排序-快速排序-算法实现介绍

话不多说,上几种排序算法代码实现:冒泡排序,选择排序,快速排序

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>


分享到:


相關文章: