排序是什么?
排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序,若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。
概念:
将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。
常见排序算法:
本次更新Java 中的快速排序
如何理解快速排序:
- 先从数列中取出一个数作为key值;
- 将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边;
- 对左右两个小数列重复第二步,直至各区间只有1个数。
4. key值的选取可以有多种形式,例如中间数或者随机数,分别会对算法的复杂度产生不同的影响。
package com.temp;
/**
* 快速排序
* @author Mr.L
*
*/
public class Temp {
/**
*
* @param a 数组
* @param l 数组起始下标
* @param r 数组最大下标
*/
public static void quickSort(int a[],int l,int r){
if(l>=r)
return;
int i = l; int j = r; int key = a[l];//选择第一个数为key
while(i<j){
while(i<j && a[j]>=key)//从右向左找第一个小于key的值
j--;
if(i<j){
a[i] = a[j];
i++;
}
while(i<j && a[i]<key)//从左向右找第一个大于key的值
i++;
if(i<j){
a[j] = a[i];
j--;
}
}
//i == j
a[i] = key;
quickSort(a, l, i-1);//递归调用
quickSort(a, i+1, r);//递归调用
System.out.println("---------每次排序分界线---------");
for (int k = 0; k < a.length; k++) {
System.out.println(a[k]);
}
}
// 创建运行入口 main
public static void main(String[] args) {
// 创建数组并且赋值
int [] a= {11,12,34,5,4,2,1,8};
// 调用Temp 类方法
quickSort(a,0,a.length-1);
}
}
运行输出如下:
---------每次排序分界线---------
1
2
4
5
8
11
34
12
---------每次排序分界线---------
1
2
4
5
8
11
34
12
---------每次排序分界线---------
1
2
4
5
8
11
34
12
---------每次排序分界线---------
1
2
4
5
8
11
12
34
---------每次排序分界线---------
1
2
4
5
8
11
12
34