• 快速排序算法


    1、算法概念

    快速排序是对冒泡排序的一种改进,使用递归原理,在所有同数量级O(nlog2n)中,平均性能最好,且从平均时间上来说是被认为一种最好的排序算法。

    2、算法思想

    采用分治法的思想,通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

    3、算法步骤

    1)将0位置的元素作为pivotKey,以此作为比较对象。

    2)比pivotKey小的数,放在pivotKey左边,比pivotKey大的不做处理。

    3)分别进行左部,右部的递归,重复上述步骤直到排序结束。

    4、算法函数

    1)partition(int[] array,int left,int right)-分割函数(一次快排函数)找出比较轴,进行一次排序。

    2)sort(int[] array,int left,int right)-递归函数,递归实现快排过程。

    5、算法实现

     1 package com.arithmetic.demo;
     2 
     3 public class QuickSort {
     4     //分解函数,进行一次快排
     5     public static int partition(int[] array,int left,int right)
     6     {
     7         int pivotKey = array[left];
     8         while(left < right)
     9         {
    10             while(left < right && array[right] >= pivotKey)
    11             {
    12                 right--;
    13             }            
    14             array[left] = array[right];
    15             while(left < right && array[left] <= pivotKey)
    16             {
    17                 left++;
    18             }            
    19             array[right] = array[left];
    20         }
    21         array[left] = pivotKey;        
    22         return left;
    23     }
    24     //递归函数,递归实现整个快排过程
    25     public static void sort(int[] array,int left,int right)
    26     {
    27         if(left < right)//如果不加此判断,会导致递归无法退出而栈溢出异常
    28         {
    29             int pivot = partition(array,left,right);
    30             sort(array,left,pivot-1);
    31             sort(array,pivot+1,right);
    32         }
    33         
    34     }
    35     //测试函数
    36     public static void main(String[] args)
    37     {
    38         int[] array = {7,4,5,3,2,6,9,1};
    39         System.out.print("排序前:");
    40         for(int i=0;i<array.length;i++)
    41         {
    42             System.out.print(array[i]+" ");
    43         }
    44         
    45         sort(array,0,array.length-1);
    46         
    47         System.out.print("
    排序前:");
    48         for(int i=0;i<array.length;i++)
    49         {
    50             System.out.print(+array[i]+" ");
    51         }
    52         
    53     }
    54 
    55 }
  • 相关阅读:
    POJMatrix(二维树状数组)
    HD1556Color the ball(树状数组)
    闲的没事,自挂东南枝
    高端、洋气效果
    “绝对”妹纸~position
    float元素一定要闭合
    dw cs6激活码一枚
    shell 预定义变量
    ubuntu 安装docker
    Microsonf visual c++ 14+ 离线内网安装
  • 原文地址:https://www.cnblogs.com/fxust/p/4973926.html
Copyright © 2020-2023  润新知