快速排序的实现

快速排序

思想:

1、先从数列中取出一个数作为基准数
2、分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边
3、再对左右区间重复第二步,直到各区间只有一个数
首先根据第一个元素的下标和最后一个元素的下标得到中值的下标并返回

代码如下
求基准值:通过getmiddle()方法得到基准值(中轴),将数组按基准值分成两个数组

public static int getMiddle(int[] array,int start,int end){//递归获取中轴
int temp=array[start];
while(start<end){
while(start<end&&array[end]>=temp){
end–;
}
if(start>=end){
break;
}else{
array[start]=array[end];
}
while(start<end&&array[start]<=temp){
start++;
}
if(start>=end){
break;
}else{
array[end]=array[start];
}
}
array[start]=temp;
return start;//返回中值位

采用分治思想,递归调用自身,将得到的由基准值分成的两个数组递归排序

public static void QuicklySort(int[] array,int start,int end) {//采用分治思想
if(start<end){//递归排序
int num=getMiddle(array,start,end);
QuicklySort(array,start,num-1);
QuicklySort(array,num+1,end);
}
}

传入数组,并调用排序方法

public static void Sort(int[] array){//调用快排方法
if(array.length>0){
QuicklySort(array,0,array.length-1);
}
}

打印数组元素

public static void Print(int[] array){
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" “);
}
System.out.println(” ");
}

主函数给数组赋值,并输出排序前后的元素

public static void main(String[] args) {
int[] array={8,4,6,9,5,2,7,3,1,10};
System.out.println(“排序前:”);
Print(array);
System.out.println(“排序后:”);
Sort(array);
Print(array);
Scanner scanner=new Scanner(System.in);
int aa=scanner.nextInt();
int b=scanner.nextInt();
System.out.println();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值