• 快速排序(比希尔排序还要快)


    代码

    	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的值
    			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;
    			}
    		}
    		
    		//不判断,出现栈溢出
    		if(l == r){
    			l += 1;
    			r -= 1;
    		}
    		//向左递归
    		if(left < r){
    			quickSort(arr, left, r);
    		}
    		//向右递归
    		if(right > l){
    			quickSort(arr, l, right);
    		}
    	}
    

    效率

    	//8000 0000 17781ms
    	//800 0000 1632ms
    	//80 0000 154ms
    	//8 0000 27ms
  • 相关阅读:
    代码管理模型概况
    循环链表
    队列

    链表
    java 2020-10-12T11:22:49.000+0800 字符串转换成正常时间格式
    动态数组
    mysql练习
    复杂度与LeetCode
    记一次带逗号的数字类型处理
  • 原文地址:https://www.cnblogs.com/kaka-qiqi/p/15272957.html
Copyright © 2020-2023  润新知