快速排序--JAVA


public class 分治_快速排序 {

	/**

	 *交换函数,i,j为数组索引

	 */

	static void swap(int A[], int i, int j)

	{

	    int temp = A[i];

	    A[i] = A[j];

	    A[j] = temp;

	}

	/**

	 * 选取一个关键字(key)作为枢轴,一般取整组记录的第一个数/最后一个,这里采用选取序列最后一个数为枢轴。

	 * 设置两个变量left = 0;right = N - 1;

	 * 从left一直向后走,直到找到一个大于key的值,right从后至前,直至找到一个小于key的值,然后交换这两个数。

	 * 重复第三步,一直往后找,直到left和right相遇,这时将key放置left的位置即可。

	 * @return

	 */

	static int PartSort(int[] array,int left,int right)

	{

	    int key = array[right];//定义基准 

	    int count=right;//保存rigth值

	    while(left < right)//防止数组越界

	    {

	        while(left < right && array[left] <= key)

	        {

	            ++left;

	        }

	        while(left < right && array[right] >= key)

	        {

	            --right;

	        }

	        swap(array,left,right);

	    }

	    swap(array,right,count);

	    return right;

	}

	/**

	 *分治思想,递归调用

	 */

	static void QuickSort(int array[],int left,int right)

	{

	    if(left >= right)//表示已经完成一个组

	    {

	        return;

	    }

	    int index = PartSort(array,left,right);//枢轴的位置

	    QuickSort(array,left,index - 1);

	    QuickSort(array,index + 1,right);

	}

	public static void main(String[] args) {

		int a[]= {1,5,-5,54,15,67,16,23};

		QuickSort(a,0,7);

		for(int i=0;i<a.length;i++) {

			System.out.print(" "+a[i]);

		}

	    System.out.print("\n");

	}

}

快速排序过程:

定义数组最右边为枢轴即为KEY,从左往右 先找到a[left]>key的情况,再找到a[right]<key的情况,两者交换继续执行,最后让枢轴和最后的right交换,最后的right即为 left和right相遇时的情况;再递归由枢轴左右分割的两个数组继续执行直到排序结束,其为本人个人理解;

如不明白可点击如下链接再进行详细了解

https://blog.csdn.net/sdoog_owt/article/details/80058870

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值