zoukankan      html  css  js  c++  java
  • 快速排序算法 java 实现

    快速排序算法 java 实现

    快速排序算法Java实现
    白话经典算法系列之六 快速排序 快速搞定
    各种排序算法的分析及java实现

    算法概念

    快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。

    算法思想

    1. 先从数列中取出一个数作为基准数。
    2. 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
    3. 再对左右区间重复第二步,直到各区间只有一个数。

    算法实现

    package com.lygedi.sort;
    
    public class QuickSort {
    	/*
    	1.将基准数挖出形成第一个坑list[high];
        2.由前向后找比它大的数,找到后挖出此数填前一个坑list[high]中;
        3.由后向前找比它小或相等的数,找到后也挖出此数填到前一个坑list[low]中;
        4.再重复执行2,3二步,直到low==high,将基准数填入list[high]中;
        -------------------------------------------------------------------
        也可以理解成pivot、list[low]、list[high]在循环做swap,
        pivot在开始和结束时起了temp的作用
    	*/
    	public int partition(int[] list,int low,int high){
            //取出最右边元素做基准值
    		int pivot = list[high];
    		while(low<high){
                //从左向右找第一个大于pivot的item
    			while(low<high && list[low]<=pivot){
    				low++;
    			}
    			if(low<high){
    				list[high] = list[low];
    			}
                //从右向左找第一个小于等于pivot的item
    			while(low<high && list[high]>pivot){
    				high--;
    			}
    			if(low<high){
    				list[low] = list[high];
    			}
    		}
    		//用list[hig]和list[low]都可以,因为low==high
    		list[high]=pivot;
    		return high;
    	}
    	
    	public void quickSort(int[] list,int low,int high){
    		if(low<high){
    			int position = partition(list,low,high);
    			quickSort(list,low,position-1);
    			quickSort(list,position+1,high);
    		}
    	}
    	
    	public void quickSort(int[] list){
    		if(list.length>0){
    			quickSort(list,0,list.length-1);
    		}
    	} 
    
    	public static void main(String[] args) {
    		int a[]={49,38,65,9,76,13,27,49,8,34,12,64,49,56,2,51,13,5,4,62,99,98,54,56,17,17,18,23,34,56,15,35,25,53,51};
    		
    		QuickSortReserve qs = new QuickSortReserve();
    		qs.quickSort(a);
    		
            System.out.println(a.length);
            for(int i=0;i<a.length;i++)  
                System.out.println(Integer.toString(i)+"-"+a[i]); 
    	}
    }
    
  • 相关阅读:
    fatal: unable to auto-detect email address (got 'tim@newton.(none)')的解决方法
    使用git命令提示“不是内部或外部命令
    Windows系统下安装 CMake
    php与mysql的连接
    array_merge和加号的区别
    可重入锁的实现
    redis scan
    redis主丛,哨兵和集群的区别
    高并发架构系列:Redis并发竞争key的解决方案详解
    laravel上传图片
  • 原文地址:https://www.cnblogs.com/lygbzhu/p/5441839.html
Copyright © 2011-2022 走看看