• 快速排序


    快速排序

    快速排序法介绍:

    快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

    public static void quickSort(int[] arr,int left, int right) {
    		int l = left; //左下标
    		int r = right; //右下标
    		//pivot 中轴值
    		int pivot = arr[(left + right) / 2];
    		int temp = 0; //临时变量,作为交换时使用
    		//while循环的目的是让比pivot 值小放到左边
    		//比pivot 值大放到右边
    		while( l < r) { 
    			//在pivot的左边一直找,找到大于等于pivot值,才退出
    			while( arr[l] < pivot) {
    				l += 1;
    			}
    			//在pivot的右边一直找,找到小于等于pivot值,才退出
    			while(arr[r] > pivot) {
    				r -= 1;
    			}
    			//如果l >= r说明pivot 的左右两的值,已经按照左边全部是
    			//小于等于pivot值,右边全部是大于等于pivot值
    			if( l >= r) {
    				break;
    			}
    			
    			//交换
    			temp = arr[l];
    			arr[l] = arr[r];
    			arr[r] = temp;
    			
    			//如果交换完后,发现这个arr[l] == pivot值 相等 r--, 前移
    			if(arr[l] == pivot) {
    				r -= 1;
    			}
    			//如果交换完后,发现这个arr[r] == pivot值 相等 l++, 后移
    			if(arr[r] == pivot) {
    				l += 1;
    			}
    		}
    		
    		// 如果 l == r, 必须l++, r--, 否则为出现栈溢出
    		if (l == r) {
    			l += 1;
    			r -= 1;
    		}
    		//向左递归
    		if(left < r) {
    			quickSort(arr, left, r);
    		}
    		//向右递归
    		if(right > l) {
    			quickSort(arr, l, right);
    		}
    		
    		
    	}
    

    快速排序法应用实例:
    要求: 对 [-9,78,0,23,-567,70] 进行从小到大的排序,要求使用快速排序法。【测试8w和800w】
    说明[验证分析]:
    如果取消左右递归,结果是 -9 -567 0 23 78 70
    如果取消右递归,结果是 -567 -9 0 23 78 70
    如果取消左递归,结果是 -9 -567 0 23 70 78

  • 相关阅读:
    ES6实现小案例--自定义弹框
    ES6 字符串、数值与布尔值、函数参数的解构赋值
    ES6 对象的解构赋值
    ES6 数组的解构赋值
    CentOS7安装mysql后无法启动服务,提示Unit not found
    CentOS7安装MySQL报错,解决Failed to start mysqld.service: Unit not found
    redis修改密码
    redis入门
    如何在本地远程连接linux虚拟机上面的mysql
    Linux下彻底卸载mysql详解
  • 原文地址:https://www.cnblogs.com/wanwanyuan/p/14328256.html
Copyright © 2020-2023  润新知