快速排序
(一)快速排序基本思想:采用分治的思想,从待排序的数据中选一个数作为基数(一般是第一个数),
分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
再对左右区间重复第二步,直到各区间只有一个数。
(二)代码如下
public class KuaiSu {
public static void main (String agrs[]){
int a[] = {72,6,57,88,60,42,83,73,48,85};
quick_sort(a,0,a.length-1);
System.out.print(a[0]+","+a[1]+","+a[2]+","+a[3]+","+a[4]+","+a[5]+","+a[6]+","+a[7]+","+a[8]+","+a[9]+",");
}
static void quick_sort(int s[], int left, int right)
{
if (left < right)
{
//Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
int l = left;
int r = right;
int temp = s[left];
while (l < r)
{
while(l < r && s[r] >= temp) // 从右向左找第一个小于x的数
r--;
if(l < r) //如果找到了比x小的数,则把这个数放进坑,并i++
s[l++] = s[r];
while(l < r && s[l] < temp) // 从左向右找第一个大于等于x的数
l++;
if(l < r)
s[r--] = s[l];
}
//退出时,i等于j。将x填到这个坑中。
s[l] = temp;
quick_sort(s, left, l - 1); // 递归调用
quick_sort(s, l + 1, right);
}
}
}
每次从无序的序列中找出一个数作为中间点(可以把第一个数作为中间点),然后把小于中间点的数放在中间点的左边,把大于中间点的数放在中间点的右边;对以上过程重复log(n)次得到有序的序列。每次对n个数进行一次处理,所以他的时间复杂度为n*log(n)。