本篇博客是我第一篇在博客园上的博客,接下来我也会陆续传上我的java学习历程。第一篇博客可能会写的很low 。大家多多关照^_^
本次主要来介绍一下快速排序的算法原理,以及快速排序的代码分析。
快速排序的原理:
它是由冒泡排序改进而得,它是在待排序的n个元素中任取一个元素(通常取第一个元素)作为基准,通过从两头向中间扫描的方式,将基准数放入适当的位置将其分成两个区域,使得它的前一部分都比它小,后一部分都比它大。然后通过递归的方式,比较所有的区域。
快速排序的方法:
首先找到第一个数将其作为基准,然后从右往左寻找比基准数的小的数(将其位置定义为i)然后停止寻找(这里必须先从右往左寻找,否则你最后找的数将会大于基准数,交换的时候会导致这个大于它的数在它左边),然后从左往右寻找基准数大的数(将其位置定义为j,i<j).然后将其交换,直到i=j时停止,然后将相等的这个位置与基准数交换,文字可能比较难懂,直接上图分析。
下面附上快速排序算法:
public class Quicklysort {
void sort(int a[], int left, int right) {
//直到所有左边的数都小于右边的数退出递归
if (left <right){
int temp = a[left]; // 通过设置一个变量来存储基准值
int i = left; //不要去改变表参数变量,将它赋值给一个变量
int j = right;
while ( i != j) {
// 顺序很重要,要先从右边开始找
while (a[j] >= temp && i < j)
j--;
// 再找左边的
while (a[i] <= temp && i < j)
i++;
// 交换两个数在数组中的位置
int t = a[i];
a[i] = a[j];
a[j] = t;
}
//将基准数归位
a[left] = a[i];
a[i] = temp;
sort(a, left, i - 1);// 继续处理左边的,这里是一个递归的过程。
sort(a, i + 1, right);// 继续处理右边的 ,这里是一个递归的过程。
}
}
}
public class QuicklysortMain {
public static void main(String []args){
Quicklysort s=new Quicklysort();
int[] a = {5,7,2,6,0,9,4,8,3};//定义一个数组存放需要排序的数据
int start = 0;
int end = a.length-1;
s. sort(a,start,end);
System.out.println(Arrays.toString(a));
}
}
ok,到这我已经结束我的第一次分享。请期待我的下一次分享哦,我会努力把以后的写的更好的。^_^