排序算法TWO:快速排序QuickSort
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的更多相关文章
- 排序算法之快速排序QuickSort
挖坑填数-快速排序 1. left = L,right = R;将基准数挖出形成第一个坑s[left]; 2. right --; 由后向前找比它小的数,找到后挖出此数填前一个坑s[left]中. 3 ...
- Java常见排序算法之快速排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- Python之排序算法:快速排序与冒泡排序
Python之排序算法:快速排序与冒泡排序 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/7828610.html 入坑(简称IT)这一行也有些年头了,但自老师 ...
- Java排序算法之快速排序
Java排序算法之快速排序 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分 ...
- 排序算法之快速排序Java实现
排序算法之快速排序 舞蹈演示排序: 冒泡排序: http://t.cn/hrf58M 希尔排序:http://t.cn/hrosvb 选择排序:http://t.cn/hros6e 插入排序:ht ...
- 常用排序算法之——快速排序(C语言+VC6.0平台)
经典排序算法中快速排序具有较好的效率,但其实现思路相对较难理解. #include<stdio.h> int partition(int num[],int low,int high) / ...
- javascript高级排序算法之快速排序(快排)
javascript高级排序算法之快速排序(快排)我们之前讨论了javascript基本排序算法 冒泡排序 选择排序 插入排序 简单复习: 冒泡排序: 比较相邻的两个元素,如果前一个比后一个大,则交换 ...
- javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法)
javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法) 一.快速排序算法 /* * 这个函数首先检查数组的长度是否为0.如果是,那么这个数组就不需要任何排序,函数直接返回. * ...
- Python实现排序算法之快速排序
Python实现排序算法:快速排序.冒泡排序.插入排序.选择排序.堆排序.归并排序和希尔排序 Python实现快速排序 原理 首先选取任意一个数据(通常选取数组的第一个数)作为关键数据,然后将所有比它 ...
随机推荐
- NSMutableAttributedString iOS 在UILabel显示不同的字体和颜色(转)
在项目开发中,我们经常会遇到在这样一种情形:在一个UILabel 使用不同的颜色或不同的字体来体现字符串,在iOS 以后我们可以很轻松的实现这一点,官方的API 为我们提供了UILabel类的attr ...
- 将某个组中的账户移动到新的OU下
将某个组中的账户移动到新的OU下 #定义组名 $groupname = "testg" #定义新的OU名称 $newou = "OU=oo,OU=Admins,dc=dd ...
- 继续推广我的新博客xysay:http://www.xysay.com/
RT 博客收拾了一下,准备以后就在那里记录论文笔记啦,求交流,求推荐,求友链~~~ http://www.xysay.com/
- iOS开发——高级技术&广告功能的实现
广告功能的实现 iPhone/iPad的程序,即使是Free的版本,也可以通过广告给我们带来收入.前提是你的程序足够吸引人,有足够的下载量.这里,我将介绍一下程序中集成广告的方法.主要有两种广告iAd ...
- JAVA实现的异步redisclient
再使用redis的过程中,发现使用缓存尽管好,可是有些地方还是比較难权衡,缓存对象大了,存储对象时的序列化工作非常繁重,消耗大量cpu:那么切分成非常小的部分吧,存取的次数变多了,redisclien ...
- linux cpio 备份命令
cpio 命令 [root@linux ~]# cpio -covB > [file|device] <==备份[root@linux ~]# cpio -icduv < [fi ...
- 探索高效jQuery的奥秘
讨论jQuery和javascript性能的文章并不罕见.然而,本文我计划总结一些速度方面的技巧和我本人的一些建议,来提升你的jQuery和javascript代码.好的代码会带来速度的提升.快速渲染 ...
- jsp The requested resource (/demo10/loginBean) is not available.
The requested resource (/demo10/loginBean) is not available. <?xml version="1.0" encodi ...
- ios快捷键
分屏:cmd + option + return 退出分屏:cmd + return cmd + option + [ 代码上跳 cmd + [ 代码左移
- 关于Git补丁文件交互
之前各个章节的版本库的交互都是通过 git push和git pull命令来实现的.这个是Git最主要的交互模式,但并不是全部. 使用补丁文件是另外一种交互方式,适用于参与者众多的大型项目进行的分布式 ...