排序-4-快速
来源:互联网 发布:算法导论第四版pdf 编辑:程序博客网 时间:2024/05/28 11:51
工具方法类:
package myDataStructrueADNDalgorith.three.arrSort;/** * 数组为模板排序算法中的一些公用的模板方法 * 创建人:曹雪坤 * 时间:2017年3月12日-上午10:15:02 * @version 1.0.0 * */public class Example { /* * 交换数组中的两个数据 */ public static void exch(int [] arr,int i,int index){ int change = arr[i]; arr[i] = arr[index]; arr[index] = change; } /* * 遍历数组 */ public static void show(int[] arr){ System.out.println("遍历数组"); for(int i:arr){ System.out.print(" "+i+" "); } System.out.println(); }}
快速排序:
package myDataStructrueADNDalgorith.three.arrSort;/** * 基准值:一般选择序列的第一个元素 * 一次循环: * 从前往后找,找到一个比基准值小的数下标为a, * 在从后往前找,找到一个比基准值大的数下标为b * 如果a<b交换a,b对应的数据,否则退出此次循环 * 交换基准值和b对应的数据,此时所有下标比b小对应的数都比b对应的小,所有下标比b大的都比b对应的数大 * * 故b将数组划分了两段,这两段同理像这样递归下去,直到传入数组的坐下标大于等于右下标 */public class QuickSort { public static void main(String[] args) { int arr[] ={7,5,2,1,3,1,4,6,9,8,10,12,13,1,5,19,11,14,16,20,11,90}; QuickSort.sort(arr, 0, arr.length-1); Example.show(arr); } public static void sort(int[]arr,int L,int R){ if(L>=R)return; int index = Partion(arr,L,R); sort(arr, L, index-1); sort(arr,index+1,R); } public static int Partion(int[]arr,int L,int R){ int i = L; int j = R+1; int num = arr[L]; //从左往右找,找到第一个大于或等于arr[L]的数的下标i,和从右往左找找到第一个小于或等于arr[L]的下标j while(true){ while(arr[++i]<num)if(i==R)break;//从左往右找,找到第一个大于或等于arr[L]的数的下标i while(arr[--j]>num)if(j==L)break;//从右往左找找到第一个小于或等于arr[L]的下标j /* * 最极端情况就是所有的数都大于arr[L],和所有的数都小于arr[L] * 所有的数都大于arr[L],i == L+1,j=R * 所有的数都小于arr[L],i=R,j=R * 有小于或等于arr[L]和大于或等于arr[L],就属于正常情况. */ if(i>=j)break; Example.exch(arr, i, j); }//end of while(true) Example.show(arr); System.out.println("---"+j+"-"+arr[j]+"=="+L+"=="+arr[L]); Example.exch(arr, L, j); return j; }}
阅读全文
0 0
- 排序4快速排序
- 排序(4) ---快速排序
- [排序算法4] - 快速排序
- 排序(4)快速排序
- 排序算法(4)----快速排序
- (4)快速排序
- 4、快速排序
- 排序-4-快速
- 排序算法4--快速排序法
- 4 -- 交换排序之快速排序
- C++ 排序算法(4)---快速排序
- 排序算法(4)——快速排序
- 排序算法4_快速排序
- 排序4--快速(分治法)
- 数据结构基础(4) --快速排序
- 数据结构基础(4) --快速排序
- 数据结构(4)快速排序
- 数据结构基础(4) --快速排序
- wamp本地访问速度特别慢
- 嵌入式每日学习心得 网络通信技术(TCP)
- Python 操作csv 代码示例
- 解决源码编译 ZeroC Ice 缺失 mcpp、bzip2、expat 库的问题
- LVDS原理与应用简介
- 排序-4-快速
- react-native-tab-navigator简单使用
- 1-6、matlab常用封装函数与快捷键
- csv.writerow寫入多出空白一行問題解決
- 求最大公约数(辗转相除法)
- 程序中的乐观锁与悲观锁,以及动手实现乐观锁 (转)
- 写在CSDN第一篇
- iOS学习笔记-122.多线程21——多图下载1_第一种实现方式(不靠谱)
- 通过python获取美女图片