Sort--快速排序

快速排序

 1 public class QuickSort{
 2
 3     public static int Partition(int[] a,int low,int high){
 4         int pivotkey=a[low];
 5         while(low<high){
 6             while(pivotkey<=a[high]&&low<high) high--;
 7             a[low++]=a[high];
 8             while(pivotkey>=a[low]&&low<high)  low++;
 9             a[high--]=a[low];
10         }
11         a[low]=pivotkey;
12         return low;
13     }
14
15     public static void quicksort(int[] a,int low,int high){
16         int pivotkey;
17         if(low<high){
18             pivotkey = Partition(a,low,high);
19             quicksort(a,low,pivotkey-1);
20             quicksort(a,pivotkey+1,high);
21         }
22     }
23     public static void main(String[] args){
24         int[] a={49,38,65,97,76,13,27};
25         quicksort(a,0,a.length-1);
26          for(int i=0;i<a.length;i++){
27              System.out.println(a[i]);
28          }
29     }
30 }
时间: 2024-12-29 01:44:16

Sort--快速排序的相关文章

C#中Array.Sort() 快速排序-源码分析

快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod). 该方法的基本思想是: 1.先从数列中取出一个数作为基准数. 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边. 3.再对左右区间重复第二步,直到各区间只有一个数. 之前提到过,Array的Sort()方法采用的是快速排序方法,通过使用.NET Reflector对程序集mscorlib进行解析,分析源码.

Quick Sort(快速排序)

Quick Sort Let's arrange a deck of cards. Your task is to sort totally n cards. A card consists of a part of a suit (S, H, C or D) and an number. Write a program which sorts such cards based on the following pseudocode: Partition(A, p, r) 1 x = A[r]

java快速排序解析

一.基本概念 找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置.递归快速排序,将其他n-1个元素也调整到排序后的正确位置.最后每个元素都是在排序后的正 确位置,排序完成.所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归. 二.选择基准元 1.固定基准元 如果输入序列是随机的,处理时间是可以接受的.如果数组已

STL List::sort() 解析

看侯捷翻译那本<STL源码剖析>中list内置sort的算法,书中注释说是quick sort,看了半天没看明白, template <class T, class Alloc> template <class T, class Alloc> void list<T, Alloc>::sort() if (node->next == node || link_type(node->next)->next == node) return; l

Bubble, Insertion, Selection, Quick and Heap Sort

Bubble, Insertion, Selection, Quick and Heap Sort Bubble Sort 冒泡排序是基本的排序算法之一,时间复杂度为,空间复杂度也为.该算法不常被使用,因为和插入排序相比较,插入排序的时间复杂度为,而空间复杂度为.属于稳定排序. 有三种方法可以改进Bubble Sort,①当一轮比较却没有发生交换时,认为数据已经有序,停止排序.②当进行i轮排序后,数据序列后的N-i个元素已经有序,可以不考虑.③假设Data[i]与Data[i+1]是发生的最后一

排序—快速排序

快速排序由C.A.R.Hoare(1962) 开发的,该算法在数组中选择一个称为主元(pivot)的元素,将数组分为两部分,是的第一部分中的所有元素都小于或等于主元,而第二部分的所有元素都大于主元.对第一部分递归地应用快速排序算法,然后对第二部分递归地应用快速排序算法. package ss.sort; /** * 快速排序 * @author zhangss 2016-5-3 11:42:32 * */ public class QuickSort { public static void q

快速排序(面试中常考)

package com.atguigu.array.sort; /** * 快速排序 * 通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小, * 则分别对这两部分继续进行排序,直到整个序列有序. * @author shkstart * 2018-12-17 */public class QuickSort { private static void swap(int[] data, int i, int j) { int temp = data[i]; d

排序算法可视化

参考1)  <Algorithms_4th> chapter 2 sorting 参考2)   Sorting algorithms, wiki 1  selection sort 选择排序 首先,整个序列一次比较,选择最小值,置于第一位: 然后,剩余序列再次比较,选择最小值,置于第二位; 以此类推. Java 实例: public class Selection { public static void sort(Comparable[] a) { // Sort a[] into incr

数据结构与算法 4:排序算法,选择/插入/冒泡/希尔/快速/归并

[本文谢绝转载,原文来自http://990487026.blog.51cto.com] 排序算法 平均复杂度 冒泡排序    O(n2) 选择排序     O(n2) 插入排序     O(n2) 希尔排序     O(n1.5) 快速排序    O(N*logN) 归并排序     O(N*logN) 堆排序     O(N*logN) 基数排序     O(d(n+r)) 选择排序: [email protected]://990487026.blog.51cto.com~/sort$ c

ios block初级使用

block和GCD是ios高级程序员面试必问的问题,本篇先介绍下block 第一部分:概述 Block是一个C级别的语法以及运行时的一个特性,和标准C中的函数(函数指针)类似,但是其运行需要编译器和运行时支持,从ios4.0开始就很好的支持Block,个人感觉使用block最大的便利就是简化的回调过程,以前使用uiview的动画,进程要控制动画结束后进行相应的处理,ios4.0之后,uiview新增了对block的支持,现在只要使用简单的一个block代码就可以在写动画的代码部分直接添加动画结束