算法实战java实现快速排序
来源:互联网 发布:2017人工智能产业规模 编辑:程序博客网 时间:2024/06/15 09:16
快排原理介绍
在数组s中随便选出一数,做为枢纽值x。
s1和s2
大小不必相等。递归的向s1和s2使用上面的方法,结合起来就拍好序了。
注意:
在实际应用中数组的数量小于20,插入排序的速度快与快速排序。
java实现
public class QuickSort { private final int CUTOFF = 20; void quicksort( int[] list) { quicksort( list, 0, list.length - 1); } void quicksort( int[] list, int left, int right) { if (left + CUTOFF <= right) { //得到枢纽元 int pivot = median3(list, left, right); int i = left; int j = right-1; for( ; ; ) { //当俩个指针都停下时,进行交换 while ( list[++i] < pivot) {} while ( list[--j] > pivot) {} //检查是否越界 if (i < j) swap(list, i, j); else break; } //将枢纽元放回i所在位置 swap(list, i, right - 1); //递归调用 quicksort( list, left, i - 1); quicksort( list, i+ 1, right); } else inserSort( list, left, right); } //将首尾中3个数进行排序并返回中值 int median3( int[] list, int left, int right) { int center = (left + right ) / 2; //若center值小于left值,二者交换 if (list[center] < list[left]) swap( list, left, center); //若right值小于left值,二者交换 if (list[right] < list[left]) swap( list, left, right); //若right值小于center值,二者交换 if (list[right] < list[center]) swap( list, center, right); //最终结果为left, center,right值从小到大排列 //将中值于倒数第二个值交换 swap( list, center, right-1); //返回中值 return list[ right - 1 ]; } //交换数组中的位置 void swap( int[] list, int left, int right) { int temp = list[left]; list[left] = list[right]; list[right] = temp; } //直接插入排序,由小到大 void inserSort( int[] list, int left, int right) { int j; for( int p = left; p <= right; p++ ) { int temp = list[p]; //比较当前位置与前面一个的大小, 如果当前位置较小与前一个交换。 for ( j = p; j > 0 && temp - list[ j - 1] < 0; j--) list[j] = list[j-1]; list[j] = temp; } } }
阅读全文
0 0
- 算法实战java实现快速排序
- java实现快速排序算法
- java实现快速排序算法
- 算法-快速排序-java实现
- 快速排序算法Java实现
- java算法实现快速排序
- java实现快速排序算法
- 快速排序算法-java实现
- 快速排序算法Java实现
- 快速排序算法java实现
- java实现快速排序算法
- Java实现快速排序算法
- 快速排序算法Java实现
- Java实现快速排序算法
- 快速排序算法java实现
- java实现快速排序算法
- Java 实现快速排序算法
- 快速排序算法java实现
- 关于android:layout_weight的含义
- 自动爬取SF文章并推荐到掘金--Puppeteer再探
- RYU是什么?
- 文章标题
- 1213: [视频]【计算几何】面积
- 算法实战java实现快速排序
- Python之xlsx文件从MySQL数据库导入导出
- 解決windows10和Ubuntu16.04双系统后windows10不能正常启动
- java MD5工具类
- LeetCode21:Merge Two Sorted Lists
- 67. Add Binary
- 编程作业50页4题 编写应用程序求1000 之内的所有完数
- 欲写vba代码 必先创Sub
- git简介及常用命令