基于Java的排序算法的数据分析(快速排序)

package cyz;

import java.util.Arrays;

//快速排序
public class Quick_sort {

public static void main(String[] args){
	
	int [] arr=new int []{4,3,2,5,6,1};
	quickSort(arr,0,arr.length-1);
	System.out.println(Arrays.toString(arr));
	/**
	 * 首先我们列举6个数-->4,3,2,5,6,1
	 * 一开始我们设置一个基准数,一般情况下是对数组的第一个当成基准数;通过基准数将比基准数大的放在右边  比基准数小的放在左边
	 * 
	 * 
	 *
	 *      基准数------当前数列
	 *        4       4, 3, 2, 5, 6, 1                low从数组下标为0的时候开始,high从数组的下标为arr.length-1开始
	 *                 |             |  
	 *                 low1         high1         先从high位开始,如果high位指向的数字比基准数小就将high位的数字进行copy放在low位指向的数字,接着low位向后移动,high位保持不变
	 * 第一次          4       1, 3, 2, 5, 6, 1       
	 *                   |           |
	 *                   low1        high1        从low开始,如果low位指向的数字小于基准数则向后移动,high位不变
	 * 第二次          4       1, 3, 2, 5, 6, 1       
	 *                      |        |
	 *                     low1       high1       从low开始,如果low位指向的数字小于基准数则向后移动,high位不变
	 * 第三次          4       1, 3, 2, 5, 6, 5       
	 *                         |   |
	 *                        low1  high1          从low开始,如果low位指向的数字比基准数大就将low位的数字进行copy放在high位指向的数字,接着high位向前移动,low位保持不变
	 * 第四次          4       1, 3, 2, 4, 6, 5       
	 *                         ||
	 *                       low1 high1            从high开始,如果high位指向的数字比基准数大就向前移动,low位保持不变,如果low位和high的数相等时,将基准数粘贴到当前的low位和high位一起数字
	 * 
	 * 就这样把在1,3,2,4,6,5  分为1,3,2,4 一个区域,6,5为另一个区域
	 * 1,3,2,4区域           low2从数组下标为0的时候开始,high2从数组的下标为之前的low1开始
	 * |     |
	 * low2  high2
	 * 6 ,   5区域
	 * |      |
	 * low3   high3 low3从数组下标为low1+1的时候开始,high3从数组的下标为之前的arr.length-1开始
	 *
	 * 
	 * 因此对于每个区域,我们同样运用上述的方法即可
	 * 
	 * 
	 * 
	 * @author cyz
	 */
}
public static void quickSort(int [] arr,int start,int end){
	if(start<end){
	int  stard=arr[start];//获取基准值
	int  low=start;
	int  high=end;
	
	

	while(low<high){
		//如果右边的数比基准数大的话
		while(low<high&&stard<=arr[high]){
			high--;
		}
		//如果右边的数小于基准数的话	
		if(arr[high]<stard){
			arr[low]=arr[high];	
		}
			
		//如果左边的数比基准数小的话
		while(low<high&&arr[low]<=stard){
			low++;
		}
		//如果左边的数大于基准数的话
		if(arr[low]>stard){
			arr[high]=arr[low];
		}
			
	}	
if(low==high){//如果low位和high位都在一起的时候
	arr[low]=stard;
	quickSort(arr, start, low);//比基准数的区域小于或者等于的数据进行排序
	quickSort(arr, low+1, end);//比基准数的区域大于的数据进行排序
}

}
	
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值