快速排序(Quicksort),因其排序之快而得名,虽然Ta的平均时间复杂度也是O(nlgn),但是从后续仿真结果看,TA要比归并排序和堆排序都要快。

快速排序也用到了分治思想。

(一)算法实现

 protected void quicksort(int[] array, int first, int last) {

         int pivot = array[first];
int i = first;
int j = last - 1;
boolean serachBig = true;
while (i < j) {
if (serachBig) {
if (array[j] < pivot) {
array[i] = array[j];
i++;
serachBig = false;
} else {
j--;
}
} else {
if (array[i] > pivot) {
array[j] = array[i];
j--;
serachBig = true;
} else {
i++;
}
}
}
array[i] = pivot; if (i - first > 1) {
quicksort(array, first, i);
}
if (last - i > 2) {
quicksort(array, i + 1, last);
}
}

Quicksort

1)快速排序的平均时间复杂度也是O(nlgn)

2)考虑递归,快速排序空间复杂度是O(logn),不是原地排序

3)快速排序属于比较排序

4)快速排序不是稳定排序算法

(二)仿真结果

**************************************************
Number to Sort is:2500
Array to sort is:{378132,303655,213274,506865,348563,122685,857064,624884,376943,281167...}
Cost time of 【QuickSort】 is(milliseconds):0
Sort result of 【QuickSort】:{93,862,991,1285,2737,2938,3119,3372,3933,4647...}
**************************************************
Number to Sort is:25000
Array to sort is:{737677,533972,6498,772664,516805,635063,278963,284929,577222,593745...}
Cost time of 【QuickSort】 is(milliseconds):2
Sort result of 【QuickSort】:{1,247,270,375,386,428,431,515,588,623...}
**************************************************
Number to Sort is:250000
Array to sort is:{481818,650680,957183,733420,611440,739781,495686,560166,942993,492550...}
Cost time of 【QuickSort】 is(milliseconds):23
Sort result of 【QuickSort】:{0,6,10,17,20,22,23,26,32,37...}

相关代码:

 package com.cnblogs.riyueshiwang.sort;

 import java.util.Arrays;

 public class QuickSort extends abstractSort {

     @Override
protected void sort(int[] toSort) {
quicksort(toSort, 0, toSort.length);
} protected void quicksort(int[] array, int first, int last) { int pivot = array[first];
int i = first;
int j = last - 1;
boolean serachBig = true;
while (i < j) {
if (serachBig) {
if (array[j] < pivot) {
array[i] = array[j];
i++;
serachBig = false;
} else {
j--;
}
} else {
if (array[i] > pivot) {
array[j] = array[i];
j--;
serachBig = true;
} else {
i++;
}
}
}
array[i] = pivot; if (i - first > 1) {
quicksort(array, first, i);
}
if (last - i > 2) {
quicksort(array, i + 1, last);
}
} public static void main(String[] args) {
for (int j = 0, n = 2500; j < 3; j++, n = n * 10) {
System.out
.println("**************************************************");
System.out.println("Number to Sort is:" + n);
int[] array = CommonUtils.getRandomIntArray(n, 1000000);
System.out.print("Array to sort is:");
CommonUtils.printIntArray(array); int[] array1 = Arrays.copyOf(array, n);
new QuickSort().sortAndprint(array1);
}
} }

QuickSort.java

最新文章

  1. [课程设计]Scrum 3.6 多鱼点餐系统开发进度(用户测试反馈页面构思&amp;留言板设计)
  2. java:IO流学习小结
  3. MVC中Control和View之间数据传递的方式
  4. CentOS上安装SQL Server vNext CTP1
  5. 手写一个json格式化 api
  6. Byte History
  7. HeadFirst jsp 03 (MVC)
  8. 【风马一族_Android】让app上传到Android市场的网站介绍
  9. iOS开发之深入探讨runtime机制02-runtime的简单使用
  10. 【中国剩余定理】【容斥原理】【快速乘法】【数论】HDU 5768 Lucky7
  11. Android开发手记(10) 下拉菜单Spinner
  12. Codeforces Round #203 - D. Looking for Owls
  13. iOS6和iOS7代码的适配(3)——坐标适配
  14. JetBrains IntelliJ IDEA for Mac 15.0 破解版 – Mac 上强大的 Java 集成开发工具
  15. Swift - whose view is not in the window hierarchy 问题解决方法
  16. SCU 3133(博弈)
  17. 新工具︱微软Microsoft Visual Studio的R语言模块下载试用Ing...(尝鲜)
  18. leetcode — merge-intervals
  19. mysql 目录
  20. js滚动条如何缓慢的回到顶部?

热门文章

  1. Django重点之url别名
  2. C# asp.net XML格式的字符串显示不全
  3. 二gradle创建SSM项目——Hello word
  4. python面向对象--包装标准类型及组合方式授权
  5. $PMTargetFileDir 参数位置
  6. hdu 4643 GSM(暴力)
  7. NOIP2017 Day2 T1 奶酪(并查集)
  8. 基于Redis实现简单的分布式锁【理论】
  9. 重启uwsgi
  10. TCP: time wait bucket table overflow