快速排序的两个版本

 1 package com.book.sword_offer;
 2
 3 import java.util.Arrays;
 4
 5 public class quicksort_p64 {
 6
 7     public static void main(String[] args) {
 8         int[] arr = { 5, 1, 2, 6, 7, 0, 4, 12, 2, 43, 1, 1, 1 };
 9         new solution_2().quick_sort(arr, 0, arr.length - 1);
10         System.out.println(Arrays.toString(arr));
11     }
12
13 }
14
15 class solution {
16     void quick_sort(int[] arr, int start, int end) {
17         int k = partion(arr, start, end);
18         if (k > start) {
19             quick_sort(arr, start, k - 1);
20         }
21         if (k < end) {
22             quick_sort(arr, k + 1, end);
23         }
24     }
25
26     int partion(int[] arr, int start, int end) {
27         int i = start;
28         int j = end;
29
30         int k = arr[start];
31         while (i < j) {
32             while (i < j && arr[j] >= k) {
33                 j--;
34             }
35             arr[i] = arr[j];
36             while (i < j && arr[i] <= k) {
37                 i++;
38             }
39             arr[j] = arr[i];
40         }
41         arr[i] = k;
42         return i;
43     }
44 }
45
46 class solution_2 {
47
48     void quick_sort(int[] arr, int start, int end) {
49         int k = partion(arr, start, end);
50         if (k > start) {
51             quick_sort(arr, start, k - 1);
52         }
53         if (k < end) {
54             quick_sort(arr, k + 1, end);
55         }
56     }
57
58     int partion(int[] arr, int start, int end) {
59         int pivotpos = start;
60         int pivot = arr[start];
61         for (int i = start + 1; i <= end; i++) {
62             if (arr[i] < pivot && ++pivotpos != i) {
63                 int tmp = arr[i];
64                 arr[i] = arr[pivotpos];
65                 arr[pivotpos] = tmp;
66             }
67         }
68
69         int tmp = arr[start];
70         arr[start] = arr[pivotpos];
71         arr[pivotpos] = tmp;
72
73         return pivotpos;
74     }
75 }
时间: 2024-11-13 08:15:44

快速排序的两个版本的相关文章

数据结构之---C语言实现快速排序(多个版本)

快速排序基本上有如下版本 一.国内教材双向扫描版 二.单向扫描版本 三.随机化版本 四.三数取中分割法 五.非递归版 这里给我前两个版本(较为常用) 版本一: 双向扫描版本: 如图: 代码如下: //快速排序(版本一) //带枢轴 //杨鑫 #include <stdio.h> #include <stdlib.h> #define MAXN 100 int a[MAXN + 1], n; void QuickSort(int left, int right) { int i, j

算法整理(二)---快速排序的两种实现方式:双边扫描和单边扫描

首先简单谈下快速排序的特点,时间复杂度O(nLog n),最差时间复杂度O(n^2),平均时间O(nLog n).因为用到了函数栈,空间复杂度为O(lg n),最差为O(n).是一种不稳定的排序方法.基本思想是分治法,这位大大的http://blog.csdn.net/morewindows/article/details/6684558 讲的非常清楚了,分治法+挖坑法,我就不多说了.就是以某个数为参照,使得左边的都小于他,右边的数都大于他.然后对他的左右两个区间采取同样的方法进行递归. 就其整

C++ HUSTR与两个版本的HUMAP实现

/* hustr是一个我使用很方便的字符串类,管理使用很方便, 新的humap支持多级存储各种信息,使用及其方便 旧的humap只支持字符串存储,使用方法一样 */ #include <stdio.h> #include <stdlib.h> #include <string> #include <map> #include <deque> #include <string.h> #include <stdarg.h> u

【裸单源最短路:Dijkstra算法两种版本】hdu 1874 畅通工程续

Source : hdu 1874 畅通工程续 http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让行人很困扰. 现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离. Input 本题目包含多组数据,请处理到文件结束.

类定义下标操作符时,为什么需要定义两个版本

类定义下标操作符时,一般需要定义两个版本: 1. 作为类的非const成员函数,返回引用: 2. 作为类的const成员函数,返回const引用. 首先,什么是类的const成员函数,也就是不改变对象的成员函数.表示方法就是在类的成员函数的声明和定义后面加上const. 类的有些对象可能可以改变,有的不能改变,举个例子来说,对于string对象来说,有的我们可能希望定义的string对象可以改变,有的则不能改变: string str1= "abcdefg"; const string

python实现快速排序算法(两种不同实现方式)

# -*- coding: utf-8 -*- """ Created on Fri May 16 17:24:05 2014 @author: lifeix """ #快速排序 import sys import random length = 30 def qsort(arr,left,right): lp = left rp = right if lp == rp:return while True: while arr[lp] >=

git日志输出格式及两个版本之间差异列表

查看commit id git log --pretty=format:"%h" git log --pretty=format:"%H" 获取两个版本间差异的文件列表(最好是通过git log --pretty=format:"%H",获取完整的commit id,否则linux下有可能报错.) git diff e83228e d9878b88 --name-only 当前版本id git rev-parse HEAD 带目录结构复制文件 c

有Linux使用基础不可不尝试的两个版本

如果你使用过Linux,而且已经超过半年,那么你一定积累了一些Linux基本技能,又或者你想试用纯种的Linux版本,那么我推荐两个版本给你. 一个是Debian,另一个是Linux from Scratch. 为什么要推荐Debian?建议你先去http://www.debian.org/了解,红联Linux论坛里也有开设Debian专区,它的工具都来自于GNU工程,故此称之为Debian GNU/Linux,它会让你更了解Linux的文化. Linux from Scratch就更强大了,什

编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本]

编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本] 1. 开发环境 Jdk 1.7.0_72 Maven 3.2.1 Scala 2.10.6 Spark 1.6.2 Hadoop 2.6.4 IntelliJ IDEA 2016.1.1 2. 创建项目1) 新建Maven项目 2) 在pom文件中导入依赖pom.xml文件内容如下: <?xml version="1.0" encoding="UTF-8"?> &l