快速排序学习

#快速排序
1.假设有一个数组,定义一个标准值;
2.标准值左边的值都比标准值小;
3.标准值右边都比标准值大;
4.一个无序数组,先从左边开始遍历,当遇到比标准值***大或等于***的时候停止;
5.然后开始从右边开始遍历,当遇到比标准值***小***的时候停止;
6.然后交换左右两边停止位置上的数,继续左边先开始,接着遍历;
7.最后当左右遍历到***相同的位置***时结束;
8.通过上面的遍历,把数组分成了上面两个部分,然后在对这两个部分进行上面的遍历,最后输出排序后的数组。
源代码:

/*
	 * 把一个无序数组运用快速排序法 从小到大排序
	 */
	public static void main(String[] args) 
	{
		int[] arr = {7,8,2,3,4,1,5};
		
		// 调用快排方法
		quickSort(arr, 0, arr.length - 1);
		
		// 进行遍历数组arr
		for (int i = 0; i < arr.length; i++)
		{
			System.out.println(arr[i]);
		}
	}
	/*
	 * 构造一个有参方法
	 */
	public static void quickSort(int[] arr, int life,int right)
	{
		// 用来终止方法     
		  if (life >= right)
		  {
			  return;
	      }
	    int i, j, temp;

        //定义标准值
	    temp = arr[life];

        // i表示从左面开始,j表示从又开始
	    i = life;
	    j = right;
	    while (i < j)
	    {
	    	// 先从左边看
	    	while (temp > arr[i] && i < j)
	    	{
	    		i++;
	    	}
	    	// 再从右边看
	    	while (temp <= arr[j] && i < j)
	    	{
	    		j--;
	    	}
	    	// 符合上面注释条件时,交换左右位置的值
	    	if (i < j)
	    	{
	    		temp = arr[j];
	    		arr[j] = arr[i];
	    		arr[i] = temp;
	    	}
	    }
	    // 递归调用,排列数组的两边
	    quickSort(arr,life,j - 1);
	    quickSort(arr,j + 1, right);
	}

代码中的终止条件很重要,如果没有终止条件,方法就会继续运行,我刚开始就是没有写终止条件,导致我的eclipse运行时瘫痪了在这里插入图片描述
一定要注意!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值