您的位置:首页 > 编程语言 > Java开发

Java实现快速排序算法

2017-09-11 20:40 393 查看
排序算法采用的是分而治之的方法,刚开始需要选择一个基准值,以这个基准值,把数组分成两部分,左边小于基准值的数组,右边大于基准值的数组(假设我们要实现从小到大的排列),然后在对左边序列选取基准值再把该序列一分为二,右边序列也一样,直到分到不能分为止,一直递归下去,就自然成为有序序列,快速排序的平均时间复杂度为nlog(n),但是也有缺点就是快速排序算法的稳定性不足,对于相同大小的值,因为两个值的位置不同而最后排序出来的序列不同,(可能先出现的排在前面,也可能排在后面),下面是Java实现的代码

public class sort_quick {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] data={6,3,7,4,1};
new sort_quick().sort(data,0,4);
for(int i=0;i<5;i++)
System.out.println(data[i]);
}
public void sort(int[] data,int low,int hight){
//运用三个中找一个合适的作为基准!
//找基准的方法有三种,第一:就以第一个为基准
//第二:随机
//第三:找第一和中间和最后三个数之间的中间值
if(low>hight)
return;
int mid = (low+hight)/2;
if(data[hight]<data[mid]){
int temp =data[hight];
data[hight]=data[mid];
data[mid]=temp;
}
if(data[hight]<data[low]){
int temp =data[hight];
data[hight]=data[low];
data[low]=temp;
}
if(data[mid]>data[low]){
int temp =data[mid];
data[mid]=data[low];
data[low]=temp;
}
int key=data[low];
while(low<hight){
while(low<hight&&data[hight]>key){
hight--;
}
if(low<hight)data[low++]=data[hight];
while(low<hight&&data[low]<key){
low++;
}
if(low<hight)data[hight--]=data[low];
}
data[low]=key;
sort(data,0, low-1);
sort(data,low+1,hight);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息