zoukankan      html  css  js  c++  java
  • 快速排序代码及代码步骤解释

    代码

    import java.util.Scanner;
    
    public class qSort {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Scanner sc=new Scanner(System.in);
    /* 输入一个有n个整数的数列,将他们放进数组中,其中第一个接收的数字是有多少个数字*/ 
    		while(sc.hasNext()) {
    			int n=sc.nextInt();
    			int array[]=new int[n];
    			for(int i=0;i<array.length;i++) {
    				array[i]=sc.nextInt();
    			}
    			quicksort(array,0,array.length-1);
    			//length-1,数组的length-1是最后一个数
    			for(int i=0;i<array.length;i++) {
    				System.out.print(array[i]+" ");
    			}
    		}
    
    	}
    	private static void quicksort(int array[],int left,int right) {
    		if(left<right) {
    			int r=position(array,left,right);
    			quicksort(array,left,r-1);
    			quicksort(array,r+1,right);
    		}
    		
    	}
    	
    	private static int position(int[] array, int left, int right) {
    		// TODO Auto-generated method stub
    		//输入进来的left和right一定是right>left的,因为在我们递归调用分区函数时的首要条件就是left<right
    		//不满足条件就不可以调用,对array的排序也就结束了
    		int temp=array[left];
    		int i=left;
    		int j=right+1;//为什么这里是right+1(因为后面调用--j会使j立刻变成j-1=right,避免right这个数没有与array[left]进行比较)
    		while(true) {
    			while(array[++i]<temp&&i<right) {
    			//i<right是条件,i>right将无意义
    			}
    			while(array[--j]>temp) {
    			//这里为什么没条件?
    			//j本来是最右边的数,加之是自减;
    			//可以加上J>=left不影响结果
    			}			if(i>=j)break;/*跳出的条件,当i>=j时,j的左边全部是比array[left]小的数,右边都是第array[left]大的数,也就是这个数在整个数列中位置确定*/
    			swap(array,i,j);
    		}
    		array[left]=array[j];
    		array[j]=temp;
    		return j;/*为什么return j呢?而不return i?*/
    		/*我认为跳出时,i的值可能大于j,但我们知道,当i==j时,我们就找到了这个数的位置,应当以j为准*/
    	}
    	private static void swap(int[] array, int i, int j) {
    		// TODO Auto-generated method stub
    		int temp;
    		temp=array[i];
    		array[i]=array[j];
    		array[j]=temp;
    		
    	}
    
    }

    代码由三个函数组成,主函数,分区函数,排序函数
    排序函数中,每一次调用完分区函数都会确定一个元素r在整个数列中的位置,然后对0——r-1和r+1——n调用分区
    ,直到最后分到都只有一个元素的时候,分区结束,排序也结束!

    网上的快排算法都是合在一起的,思路不清晰,所以写了个做记录!!

  • 相关阅读:
    【java】对象赋值给另一个对象
    spring boot系列(五)spring boot 配置spring data jpa (查询方法)
    Spring Data JPA 查询
    Spring Data JPA 介绍
    OpenID简介
    OAUTH协议介绍
    URL encoding(URL编码)
    RESTful 介绍
    spring boot系列(四)spring boot 配置spring data jpa (保存修改删除方法)
    spring boot 启动报 java.lang.NoClassDefFoundError: ch/qos/logback/core/spi/LifeCycle 错误
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309707.html
Copyright © 2011-2022 走看看