快速排序算法也是用的最多的一个排序算法。效率也快。如下:
快速排序算法原理:
例如:待排序的数组array的值分别是:(初始关键数据X:=49)
array[1] array[2] array3] array[4] array[5] array[6] array[7]:
23 55 32 21 12 16 6
注:我是把23最为key,一般都是把数组的[0]作为key。
进行第一次交换后: 6 55 32 21 12 16 23
进行第二次交换后: 6 23 32 21 12 16 55
进行第三次交换后: 6 16 32 21 12 23 55
进行第四次交换后: 6 16 23 21 12 32 55
进行第五次交换后: 6 16 12 21 23 32 55
第一次结束的结束为:
{6,16,12,21} 23 {32,55}
把原来的数组分成了2个数组,比key的值(23) 小的为一组,大的为一组。然后再对这两个数组进行排序。
代码:
QuickSearch.java 源码
public class QuickSearch {
/**
* 交换指定数组a的两个变量的值
* @param a 数组应用
* @param i 数组下标
* @param j 数组下标
*/
public void swap(long[] array,int i,int j)
{
if(i==j) return ;
long temp = array[i];
array[i] = array[j];
array[j] = temp;
}
/**
*
* @param array 待排序数组
* @param low 数组下标下界
* @param high 数组下标上界
* @return pivot
*/
public int partition(long[] array,int lower,int hight)
{
//当前位置为第一个元素所在位置
int position = lower;
//采用第一个元素为轴
long pivot = array[position];
for(int i = lower+1;i<=hight;i++)
{
if(array[i]<pivot)
{
position++;
swap(array,position,i);
}
}
swap(array,lower,position);
return position;
}
/**
* 快速排序实现
* @param array
* @param low
* @param high
*/
public void quickSort(long[] array,int lower,int hight)
{
if(lower <hight)
{
//分成两组
int pivot = partition(array, lower, hight);
//递归
quickSort(array,lower,pivot-1);
//递归
quickSort(array,pivot+1,hight);
}
}
}
测试代码:
public class QuickMain {
public static void main(String[] args) {
QuickSearch sort = new QuickSearch();
long[] array = new long[]{1,33,5,23,67,87,42,65,234,53,13,16,17};
sort.quickSort(array, 0, array.length-1);
for (long l : array) {
System.out.println(l+" ");
}
}
}
运行结果:
1
5
13
16
17
23
33
42
53
65
67
87
234