JAVA八大算法:快速排序

原理:

   快速排序,就是给基准数据找其正确索引位置的过程.
   如下图所示,假设最开始的基准数据为数组第一个元素23,则首先用一个临时变量去存储基准数据,即tmp=23;然后分别从数组的两端扫描数组,设两个指示标志:low指向起始位置,high指向末尾.

首先从后半部分开始,如果扫描到的值大于基准数据就让high减1,如果发现有元素比该基准数据的值小(如上图中18<=tmp),就将high位置的值赋值给low位置 ,结果如下:

 然后开始从前往后扫描,如果扫描到的值小于基准数据就让low加1,如果发现有元素大于基准数据的值(如上图46=>tmp),就再将low位置的值赋值给high位置的值,指针移动并且数据交换后的结果如下:

然后开始从前往后扫描,如果扫描到的值小于基准数据就让low加1,如果发现有元素大于基准数据的值(如上图46=>tmp),就再将low位置的值赋值给high位置的值,指针移动并且数据交换后的结果如下:

 然后再开始从后向前扫描,原理同上,发现上图11<=tmp,则将high位置的值赋值给low位置的值,结果如下:

然后再开始从前往后遍历,直到low=high结束循环,此时low或high的下标就是基准数据23在该数组中的正确索引位置.如下图所示.

        可以很清楚的知道,其实快速排序的本质就是把基准数大的都放在基准数的右边,把比基准数小的放在基准数的左边,这样就找到了该数据在数组中的正确位置.
  以后采用递归的方式分别对前半部分和后半部分排序,当前半部分和后半部分均有序时该数组就自然有序了。

以下是根据上述理论写的代码

package com.qcby;

import java.util.Arrays;

public class QuickSort {



	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] arr = new int[]{587,956,12,47,30,20,15,11,21,31,57,91,35,120};
     
		sort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }
	public static void sort(int[] arr,int left,int right){
		if(left >= right) {
			return;
		}
		 //定义第一个数为基准数
        int base = arr[left];
        // 定义变量i指向最左边
        int i = left;
        // 定义变量j指向最右边
        int j = right;
		while (i!=j){
            while (arr[j] >= base && i<j){
                j--;
            }
            while (arr[i] <= base && i<j){
                i++;
            }
			//交换
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
			
		}
		arr[left] = arr[i];
        arr[i] = base;

        sort(arr,left,i-1);
        sort(arr,i+1,right);

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值