快速排序
来源:互联网 发布:淘宝直播网址 编辑:程序博客网 时间:2024/06/03 22:01
选择排序:
思想:基于分治的思想,是冒泡排序的改进型,首先在数组选中一个基准点(选择第一个数为基准点),然后分别从数组的两端首尾,末尾扫描数组,设两个指示标志(和指针差不多的意思),一个指向起始位置low,另一个指向末尾位置high,首先从后半部分开始,如果发现有元素比基准点小,就交换low和high的位置的值,然后从前半部分开始扫描,发现元素大于基准点的值,就交换low和high的值,如此反复,知道low>=high
代码实现:
随机生成10000个数快速排序
public class QuickSort {
public static void main(String[] args) {
int[] arr =getRandomArray(10000,0,100000);
System.out.println(Arrays.toString(arr));
long time=System.nanoTime();//测试所用的时间
quickSort(arr, 0, arr.length-1);
System.out.println(System.nanoTime()-time);
System.out.println(Arrays.toString(arr));
}
public static int getMiddle(int[] array,int low,int high){
int temp=array[low];//数组第一个作为中轴
while(low<high){
while(low<high && array[high]>=temp){
high--;
}
array[low]=array[high];//比中轴小的记录移到低端
while(low<high && array[low]<=temp){
low++;
}
array[high]=array[low];//比中轴大的记录移到高端
}
array[low]=temp;
return low;
}
public static int[] quickSort(int[] array,int low,int high){
if(low<high){
int middle=getMiddle(array,low,high);
quickSort(array,low,middle-1);
quickSort(array,middle+1,high);
}
return array;
}
public static int[] getRandomArray(int len,int min,int max){
int[] array=new int[len];
for(int i=0;i<len;i++){
array[i]=(int)(Math.random()*(max-min)+min);
}
return array;
}
}
public static void main(String[] args) {
int[] arr =getRandomArray(10000,0,100000);
System.out.println(Arrays.toString(arr));
long time=System.nanoTime();//测试所用的时间
quickSort(arr, 0, arr.length-1);
System.out.println(System.nanoTime()-time);
System.out.println(Arrays.toString(arr));
}
public static int getMiddle(int[] array,int low,int high){
int temp=array[low];//数组第一个作为中轴
while(low<high){
while(low<high && array[high]>=temp){
high--;
}
array[low]=array[high];//比中轴小的记录移到低端
while(low<high && array[low]<=temp){
low++;
}
array[high]=array[low];//比中轴大的记录移到高端
}
array[low]=temp;
return low;
}
public static int[] quickSort(int[] array,int low,int high){
if(low<high){
int middle=getMiddle(array,low,high);
quickSort(array,low,middle-1);
quickSort(array,middle+1,high);
}
return array;
}
public static int[] getRandomArray(int len,int min,int max){
int[] array=new int[len];
for(int i=0;i<len;i++){
array[i]=(int)(Math.random()*(max-min)+min);
}
return array;
}
}
阅读全文
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- C++出现to_string is not a member of std 或者 to_string was not declared in this scope的解决方法
- Linux用户登录记录日志和相关查看命令汇总
- Spring返回日期格式化
- 搜狗2015 前端工程师笔试题
- 1
- 快速排序
- Python基础之列表、元组、字典、集合的使用
- 如何利用trie树加快关键词查找
- HDU 1255 线段树+扫描线
- Java并发编程:volatile关键字解析
- Django环境搭建
- git一个项目上传多个地址
- 神经网络入门-感知器算法
- JZOJ1215. 油滴扩展(2017.8B组)