首页 > 编程语言 > 详细

快速排序

时间:2017-07-16 23:01:26      阅读:302      评论:0      收藏:0      [点我收藏+]

 

 

 

 

 

 

 

 

package com.JBUtils.Arithmetic;

 

/*

  快速排序大体说来:

    1)就是从一堆数选出一个数,将小与该数的数放在其左边,把大于该数的数排在其右边。(子问题)

    2)然后就是重复1步骤,直到该堆数只有一个数(分冶)。

*/

public class JBQuikSort {
/**
* 分解子问题
* 这里用的分冶的思想 直接就是分为左右两边 直到分到只有一个数位置
* @param array
*/
public void sort(Integer []array,int start,int end){
if(start<end){
int pos=sort0(array,start,end);//pos的位置 已经是正确的位置 无需在处理
sort(array,start,pos-1);
sort(array,pos+1,end);
}
}
public int findMiddleData(Integer []array,int start,int end){

int pos=sort0(array,start,end);//pos的位置 已经是正确的位置 无需在处理
if(pos==((start+end)/2)){
return pos;
}else if(pos>((start+end)/2)){
return findMiddleData(array,pos-1,end);
}else {
return findMiddleData(array,pos+1,end);
}
}
/**
* 子问题求解 假设极端情况 就只剩下三个数 是如何操作的?
* @param array
* @param start
* @param end
*/
private int sort0(Integer []array,int start,int end){
int standard=array[start];
while(start<end){
while(start<end&&array[end]>standard){
end--;
}
if(start<end){//说明右边找到一个比标准大的数,那么就往左边的坑填
array[start]=array[end];
start++;
}
while(start<end&&array[start]<standard){
start++;
}
if(start<end){//说明左边找到了一个大于标准的数 就往右边的坑填
array[end]=array[start];
end--;
}
}
array[start]=standard;//start==end 必定跳出循环 此时应该让标准归位到中间的位置
return start;
}
}

快速排序

原文:http://www.cnblogs.com/enjoyall/p/7192160.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!