【算法导论】第七章之快速排序
来源:互联网 发布:软件与云计算 编辑:程序博客网 时间:2024/05/16 08:54
asdfsadf
package com.zhoujie;import java.util.Random;public class QuickSort {public static final int ARRAY_LENGTH = 10;public static final int ARRAY_MAX_VALUE = 1000;public static final String LOG_PREFIX = "=====================";public static final String LOG_SUFFIX = LOG_PREFIX;public static final String ARR_DELIMITER = "\t";public static void main(String[] args) {// 1. generate input arrayRandom random = new Random();int[] intArr = new int[ARRAY_LENGTH];printLine(LOG_PREFIX + "The original array is:" + LOG_SUFFIX);for (int i = 0; i < intArr.length; i++) {intArr[i] = random.nextInt(ARRAY_MAX_VALUE);print(intArr[i]);if (i != intArr.length - 1) {print(ARR_DELIMITER);}}printLine("");// 2. quick sortquickSort(intArr);// 3. print sorted arrayprintLine(LOG_PREFIX + "The sorted array is:" + LOG_SUFFIX);printLine(join(intArr, ARR_DELIMITER));}public static void quickSort(int[] intArr) {quickSort(intArr, 0, (intArr.length-1));}private static void quickSort(int[] intArr, int i, int j) {int keyPoint = partition(intArr, i, j);if(i != keyPoint){quickSort(intArr, i, keyPoint-1);}if(j != keyPoint){quickSort(intArr, keyPoint+1, j);}}private static int partition(int[] intArr, int start, int end) {int keyWordValue = intArr[end];int shouldPos = start;/* * shouldPos在for循环中应该满足循环不变式 * shouldPos: * 1. 在shouldPos(不包括它自己)之前的所有数据都小于等于keykeyWordValue * 2. 在shouldPos(包括它自己)之后的所有数据都大于keykeyWordValue */for(int i = start; i < end; i ++){if(intArr[i] > keyWordValue){// nothing to do} else {if(shouldPos != i){swap(intArr, shouldPos, i);}shouldPos ++;}}swap(intArr, shouldPos, end);return shouldPos;}private static void swap(int[] intArr, int i, int j) {int temp = intArr[j];intArr[j] = intArr[i];intArr[i] = temp;}public static void print(Object t) {System.out.print(t);}public static void printLine(Object t) {System.out.println(t);}public static String join(int[] arr, String delimiter) {StringBuilder sb = new StringBuilder();for (int element : arr) {sb.append(element);sb.append(delimiter);}return sb.substring(0, sb.length());}}
asdfasdf
- 【算法导论】第七章之快速排序
- 算法导论:第七章 快速排序
- 算法导论读书笔记 第七章 快速排序
- 算法导论第七章:快速排序
- 算法导论 第七章:快速排序
- [算法导论]第七章《快速排序》
- 算法导论第七章___快速排序
- 算法导论第七章总结:快速排序
- 算法导论 第七章:快速排序(Quicksort)
- 算法导论第七章 -- 快速排序
- 算法导论第七章-快速排序-c++
- 算法导论 第七章 快速排序
- 算法导论-第七章快速排序
- 算法导论第七章(快速排序)
- 算法导论 第七章快速排序与随机快速排序
- 算法导论 第七章快速排序与随机快速排序
- 算法导论 第七章快速排序与随机快速排序
- 算法导论学习笔记-第七章-快速排序
- 10个迷惑新手的Cocoa及Objective-C开发难点和问题
- 启动init.rc文件中的service
- linux内核数据库sqlite3的移植和简单操作
- 10年的程序员生涯的忠告
- xcode遇到的遇到的警告、错误,解决方法
- 【算法导论】第七章之快速排序
- ArcGlobe常用代码
- QT 信号与槽在不同线程不能连接的问题
- javascript 案例:十秒钟后协议文本框下的注册按钮才能点击,时钟倒数
- 快速理解C#高级概念(一) Delegate委托
- Android.mk编写介绍
- Ubuntu默认启动到字符界面
- DAS、NAS、SAN存储系统分析
- 关于nginx中的四级指针 .