Java数据结构与算法——快速排序(思路图解代码实现)(效率测试)
2020-07-16 05:57
330 查看
快速排序
快速排序法介绍:
快速排序是对冒泡排序的一种改进。 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有 数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
快排示意图解:
代码实现及详细步骤说明:
package sort; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; public class quickSort { public static void main(String[] args) { int[] arr = {-9,78,0,23,-567,23,70}; quickSort(arr,0,arr.length-1); System.out.println(Arrays.toString(arr)); //测试 System.out.println("80000个随机数据测试结构结果:"); int [] arr1 = new int[80000]; for (int i=0; i < 80000;i++){ arr1[i] = (int)(Math.random()* 8000000); } Date date1 = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String date1str = simpleDateFormat.format(date1); System.out.println("排序前的时间="+date1str); quickSort(arr1,0,arr1.length-1); Date date2 = new Date(); String date2str = simpleDateFormat.format(date2); // System.out.println("排序后" + Arrays.toString(arr1)); System.out.println("排序后的时间="+date2str); } public static void quickSort(int[] arr,int left,int right){ int l = left; int r = right; //piovt 中轴值 int piovt = arr[(l+r)/2]; int temp = 0; //while循环的目的市让比pivot值小放到左边 //比pivot大的值,放在右边 while(l < r){ //在pivot的左边一直找,找到大于等于piovt值得,才退出 while(arr[l] < piovt){ l += 1; } //在pivot的右边一直找,找到小玉等于piovt值得,才退出 while(arr[r] > piovt){ r -= 1; } //如果l >= r 说明privt的左右两边的值,都符合了预期 if (l >= r){ break; } //交换 temp = arr[l]; arr[l] = arr[r]; arr[r] = temp; //如果交换完后,发现arr[l]==pivot, if (arr[l] ==piovt) { r--; } if (arr[r] ==piovt) { l++; } } //如果 l == r, 必须l++,r--,否则会出现栈溢出 if (l == r){ l ++; r --; } //左递归 if (left < r){ quickSort(arr,left,r); } //右递归 if (right > l) { quickSort(arr,l,right); } } }
相关文章推荐
- 算法 -- Java实现快速排序(图解 + 代码实现)
- Java数据结构与算法——归并排序(图解)(算法效率测试)
- 一步步学习数据结构和算法之快速排序效率分析及java实现
- 春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。
- Tarjan 算法的伪代码实现 及 求割点的思路浅谈
- java 算法之快速排序实现代码
- 算法 -- Java实现冒泡排序(图解 + 代码实现)
- 排序技术_各种算法原理 图解 代码实现
- 算法 -- Java实现二分(折半)查找(图解 + 代码实现)
- DL之SSD:SSD算法的相关论文、设计思路、关键步骤、实现代码等配图集合之详细攻略
- JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
- 算法学习与代码实现6——快速排序
- 一步步学习数据结构和算法之快速排序效率分析及java实现
- 有一堆扑克牌,其中某张牌的张数超过了扑克牌总数的一半,请找到这张牌。写出算法思路、代码实现和算法的时间复杂度,要求算法尽可能高效。假设给定一个扑克牌的数组poker和它的大小n,请返回所求的扑克牌。
- JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
- 算法 -- Java实现选择排序(图解 + 代码实现)
- 排序技术_各种算法原理 图解 代码实现
- C语言对堆排序一个算法思路和实现代码
- 算法分析与设计作业一之Prim算法和Kruskal算法的图解及代码实现
- 经典算法(16)堆排序图解及其代码实现