import  java.util.Random ; 

 /**
  *快速排序思路:用到了分治法
  *    一个数组A[0,n-1] 分解为三个部分,A[0,p - 1] , A[p] , A[p + 1, n-1]
  *    递归调用快速排序,对A[0,p - 1]和A[p + 1,n-1]进行排序
  *
  */
 public  class  QuickSort
 {
     /**
      *快速排序主方法
      *
      */
     public  static  void  quickSort(int[] resouceArr , int  begin , int  end)
     {
         if( begin  <  end )
         {
             int  part = _partition(resouceArr , begin , end );
             quickSort(resouceArr , begin , part - 1 );
             quickSort(resouceArr , part + 1  , end );

         }
     }

     /**
      *随机化快速排序主方法
      *
      */
     public  static  void  randomizedQuickSort(int[] resouceArr , int  begin , int  end)
     {
         if( begin  <  end )
         {
             int  part = _randomizedPartition(resouceArr , begin , end );
             quickSort(resouceArr , begin , part - 1 );
             quickSort(resouceArr , part + 1  , end );

         }
     }

     /**
      *随机算法快速排序:把A[p]随机化,不限于数组尾部,把数组A[p]与数组尾部的数调换
      *
      */
     private  static  int   _randomizedPartition(int[] arr , int begin , int end )
     {
         //随机函数产生随机数
         Random  r = new Random();
         int  i =  r.nextInt(end + 1) + begin ;
         int  temp = arr[end] ;
         arr[end] = arr[i] ;
         arr[i] = temp ;

         return  _partition(arr , begin  ,  end  );
     }

     /**
      *partition对部分数组进行原址重排
      *
      */
     private  static   int  _partition(int[] arr , int  begin , int end)
     {
         //选取一个元素作为分界元素,这里选取的是最后一个元素
         int  part = arr[end] ;
         //i从-1开始,j从1开始
         int  i  =  begin -1 ;
         for(int j = begin ; j <=  end - 1 ; j++)
         {
             if(arr[j] <= part)
             {
                 i = i + 1 ;
                 int  temp = arr[i];
                 arr[i] = arr[j];
                 arr[j] = temp ;
             }
         }
         int  temp1 = arr[i+1];
         arr[i+1] = arr[end];
         arr[end] = temp1 ;
         return  i + 1 ;
     }

 }

排序算法TWO:快速排序QuickSort的更多相关文章

  1. 排序算法之快速排序QuickSort

    挖坑填数-快速排序 1. left = L,right = R;将基准数挖出形成第一个坑s[left]; 2. right --; 由后向前找比它小的数,找到后挖出此数填前一个坑s[left]中. 3 ...

  2. Java常见排序算法之快速排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  3. Python之排序算法:快速排序与冒泡排序

    Python之排序算法:快速排序与冒泡排序 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/7828610.html 入坑(简称IT)这一行也有些年头了,但自老师 ...

  4. Java排序算法之快速排序

    Java排序算法之快速排序 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分 ...

  5. 排序算法之快速排序Java实现

    排序算法之快速排序 舞蹈演示排序: 冒泡排序: http://t.cn/hrf58M 希尔排序:http://t.cn/hrosvb  选择排序:http://t.cn/hros6e  插入排序:ht ...

  6. 常用排序算法之——快速排序(C语言+VC6.0平台)

    经典排序算法中快速排序具有较好的效率,但其实现思路相对较难理解. #include<stdio.h> int partition(int num[],int low,int high) / ...

  7. javascript高级排序算法之快速排序(快排)

    javascript高级排序算法之快速排序(快排)我们之前讨论了javascript基本排序算法 冒泡排序 选择排序 插入排序 简单复习: 冒泡排序: 比较相邻的两个元素,如果前一个比后一个大,则交换 ...

  8. javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法)

    javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法) 一.快速排序算法 /* * 这个函数首先检查数组的长度是否为0.如果是,那么这个数组就不需要任何排序,函数直接返回. * ...

  9. Python实现排序算法之快速排序

    Python实现排序算法:快速排序.冒泡排序.插入排序.选择排序.堆排序.归并排序和希尔排序 Python实现快速排序 原理 首先选取任意一个数据(通常选取数组的第一个数)作为关键数据,然后将所有比它 ...

随机推荐

  1. Codeforces Codeforces Round #319 (Div. 2) B. Modulo Sum 背包dp

    B. Modulo Sum Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/577/problem/ ...

  2. Android多媒体-人脸识别

    1. 相关背景 Google 于2006年8月收购Neven Vision 公司 (该公司拥有 10 多项应用于移动设备领域的图像识别的专利),以此获得了图像识别的技术,并不是常快应用到免费的 Pic ...

  3. Nginx动静分离经典

    Nginx:安装nginx之前需要安装pcre包和zlib以支持重写,正则以及网页压缩等等]把所需的包下载到/usr/src下[根据自己的习惯,路径可以改变]1.首先安装pcre: cd /usr/s ...

  4. [React Fundamentals] Owner Ownee Relationship

    The owner-ownee relationship is used to designate a parent-child relationship with React components ...

  5. EasyUI基础入门之Easyloader(载入器)

    在了解完easyui的parser(解析器)之后,接下来就是easyloader(简单载入器)的学习了. 什么是EasyLoader 正如其名字一样easyloader的作用是为了动态的载入组件所需的 ...

  6. Android 获取信号强度

    大 家看到标题就明白了,我们有的时候在电梯里,有时有的电话有信号,有时有的电话没有信号,这个是非常闹心的,要是我们能监听一下我们自己手机信号的强度就 好了.这样,当我们在等重要的人士的电话,不至于接不 ...

  7. SSH电力项目

    第一步:创建测试表Elec_Text: create table Elec_Text(textID varchar(50) not null primary key,textName varchar( ...

  8. 例3-13设置ROI

    写在前面,写的时候总有种给别人写的感觉,然后就写得很冗长,也没有办法很好的表达自己的想法,总觉得写得越多越好,实则不然,要最言简意赅,还能表达意思. 嗯! 只写自己不明白的地方,如果恰巧有人也看了我的 ...

  9. 【shell】 I/O重定向

    1.基本概念  a.I/O重定向通常与 FD有关,shell的FD通常为10个,即 0-9:  b.常用FD有3个,为0(stdin,标准输入).1(stdout,标准输出).2(stderr,标准错 ...

  10. HTML5 乱记

    HTML5 的文档类型声明可以触发所有具备标准模式的浏览器的标准模式,包括那些对 HTML5 一无所知的浏览器,也就是说,可以在任何网页中都使用 HTML5 文档类型声明 <!DOCTYPE h ...