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

    参考博文:http://www.cnblogs.com/MOBIN/p/4681369.html

    快速排序是冒泡排序的改进版,也是最好的一种内排序,在很多面试题中都会出现

      思想:

        1.在待排序的元素中任取一个元素作为基准(通常选第一个元素,但最好的选择方法是从待排序元素中随机选取一个作为基准),称为基准元素

        2.将待排序的元素进行分区,对基准元素大的元素放到它的右边,比其小的放在它的左边

        3.对左右两个分区重复以上步骤直到所有元素都是有序的

      所以可以把快速排序联想成东拆西补或西拆东补,一边拆一边补,直到所有元素达到有序状态,

      左边被拆了,就要遍历右边的元素去补,右边被拆了,就遍历左边的元素去补

      实现代码:

     1 public class QuickSort {
     2     
     3     public static void main(String[] args) {
     4         int[] arr = {5,7,1,8,4};
     5         int _left = 0;
     6         int _right = arr.length-1;
     7         
     8         System.out.print("排序前:" );
     9         for(int num:arr) {
    10             System.out.print(num);
    11         }
    12         
    13         quickSort(arr,_left,_right);
    14         System.out.print("----排序后:" );
    15         for(int num:arr) {
    16             System.out.print(num);
    17         }
    18     }
    19 
    20     private static void quickSort(int[] arr, int _left, int _right) {
    21         int left = _left;
    22         int right = _right;
    23         int base = 0;
    24         if(left < right) {
    25             base = arr[left];                //我们将base元素单独拿出,这样base元素的位置就出现了一个坑
    26             while(left != right) {
    27                 while(left < right && arr[right] >= base)         //从右往左找 小于 base 的元素,将其填入base左边的坑中
    28                     right--;                                    //这个 while的目的,就是不停地移动right指针,直到某个元素小于base,
    29                 arr[left] = arr[right];                            //小于base的元素是不应该出在右边的,所以我们把它放到左边的坑中,这样在右边又空出来了一个坑
    30                 
    31                 while(left < right && arr[left] <= base)        //从左往右找 大于 base 的元素,将其填入base右边的坑中,while的目的和上面类似        
    32                     left++;                                        //用左边大于base的元素填充右边的坑,
    33                 arr[right] = arr[left];
    34             }
    35             
    36             arr[right] = base;        //将基准值回归填充到中间
    37             
    38             quickSort(arr,_left,left - 1);    //对基准元素左边的元素递归排序
    39             quickSort(arr,right + 1,_right);//对基准元素右边的元素递归排序
    40         }
    41     }
    42 }
  • 相关阅读:
    PHP做Web开发的MVC框架(Smarty使用说明 )
    PHP + Smarty + html5 构建Wap应用
    HTML5游戏中动画帧的概念理解
    [转]jQuery选择器 (详解)
    2014马年应该有怎么样的学习方式和思考原则
    html5视频播放解决方案
    html5学习摘要
    sqlserver2008行锁
    关于一些url中传递参数有空格问题
    MongoDB和Redis区别
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7477910.html
Copyright © 2011-2022 走看看