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]); 
    	}
    }
    
  • 相关阅读:
    LeetCode "Palindrome Partition II"
    LeetCode "Longest Substring Without Repeating Characters"
    LeetCode "Wildcard Matching"
    LeetCode "Best Time to Buy and Sell Stock II"
    LeetCodeEPI "Best Time to Buy and Sell Stock"
    LeetCode "Substring with Concatenation of All Words"
    LeetCode "Word Break II"
    LeetCode "Word Break"
    Some thoughts..
    LeetCode "Longest Valid Parentheses"
  • 原文地址:https://www.cnblogs.com/lygbzhu/p/5441839.html
Copyright © 2011-2022 走看看