快速排序法QuickSort

/**
 *
 * @author Administrator
 * 功能:交换式排序之快速排序
 */
package com.test1;

import java.util.Calendar;

public class QuickSort {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        //int[] arr = { 1, 6, 0, -1, 9, -100, -90 };
        int[] arr = new int[10000];
        for (int i = 0; i < arr.length; i++) {
            //让程序随机产生一个1 - 10000个数
            //Math.random会产生一个0到1的数
            arr[i] = (int)(Math.random()*10000);
        }
        Quick quick = new Quick();

        //在排序前打印系统时间
        //Calendar是单开模式,在系统里面只有一个,且只需要一个实例,不是new 出来的
        //Java共有23中模式
        Calendar cal = Calendar.getInstance();
        System.out.println("排序前:"+cal.getTime());

        quick.sort(0, arr.length-1, arr);

        //在排序后打印系统时间
        //因为是单开的,所有首先重新得到实例
        cal = Calendar.getInstance();
        System.out.println("排序后:"+cal.getTime());
//        System.out.println("排序后的结果是:");
//        for (int i = 0; i < arr.length; i++) {
//            System.out.print(arr[i]+" ");
//        }
    }

}

//快速排序法
class Quick
{
    public void sort(int left, int right, int[] array){

        int l = left;
        int r= right;
        int pivot = array[(left+right)/2];
        int temp = 0;

        while(l < r)
        {
            while(array[l] < pivot) l++;
            while(array[r] > pivot) r--;

            if(l >= r)
                break;

            temp = array[l];
            array[l] = array[r];
            array[r] = temp;
        }

//        System.out.println("the current array is");
//        for(int i = 0; i< 5; i++)
//        {
//            System.out.println(" "+array[i]);
//        }

        if(l == r)
        {
            l++;
            r--;
        }

        if(left < r)
            sort(left,r,array);
        if(right> l)
            sort(l,right,array);
    }

}
时间: 2024-11-15 00:40:30

快速排序法QuickSort的相关文章

快速排序法(一)

说明快速排序法(quick sort)是目前所公认最快的排序方法之一(视解题的对象而定),虽然快速排序法在最差状况下可以达O(n2),但是在多数的情况下,快速排序法的效率表现是相当不错的.快速排序法的基本精神是在数列中找出适当的轴心,然后将数列一分为二,分别对左边与右边数列进行排序,而影响快速排序法效率的正是轴心的选择.这边所介绍的第一个快速排序法版本,是在多数的教科书上所提及的版本,因为它最容易理解,也最符合轴心分割与左右进行排序的概念,适合对初学者进行讲解.解法这边所介绍的快速演算如下:将最

ACM——快速排序法

快速排序 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte总提交:653            测试通过:297 描述 给定输入排序元素数目n和相应的n个元素,写出程序,利用内排序算法中快速排序算法进行排序,并输出排序最后结果的相应序列. 输入 共两行,第一行给出排序元素数目n,第二行给出n个元素,1≤n≤100000,每个元素值范围为 [0,100000) 输出 一行,输出排序结果. 样例输入 748 36 68 72 12 48 2

Javascript算法系列之快速排序(Quicksort)

Javascript算法系列之快速排序(Quicksort) 原文出自: http://www.nczonline.net/blog/2012/11/27/computer-science-in-javascript-quicksort/ https://gist.github.com/paullewis/1981455#file-gistfile1-js 快速排序(Quicksort)是对冒泡排序的一种改进,是一种分而治之算法归并排序的风格 核心的思想就是通过一趟排序将要排序的数据分割成独立的

实例365(14)---------经典数组排序方法------快速排序法

一:截图 二:快速排序详解 快速排序法(QuickSort)是一种非常快的对比排序方法.它也Divide-And-Conquer思想的实现之一.自从其产生以来,快速排序理论得到了极大的改进,然而在实际中却十分难以编程出正确健壮的代码.本文将对快速排序算法的基本理论和编程实践方面做作一个全面的讲解.在本文讲解中,将忽略很多细枝末节,试图给读者形成一个非常具体的快速排序形象. 快速排序---基本理论 因为该算法是Divide-And-Conquer思想的一个实现,所以本文将以Divide-And-C

排序——快速排序法

快速排序法基本思想: 快速排序(Quicksort)是对冒泡排序的一种改进.由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列. 程序代码: #include <stdio.h> void print(int a[], int n) { int j; for(j=0; j < n

快速排序法 quickSort---java

快速排序法: public class Main { public static void main(String[] args) { int a[]={7,8,1,3,5}; new Main(a); } public Main(int[] a){ System.out.println("排序前:"); print(a); quickSort(a,0,a.length-1); System.out.println(); System.out.println("排序后:&qu

【从零学习经典算法系列】分治策略实例——快速排序(QuickSort)

在前面的博文(http://blog.csdn.net/jasonding1354/article/details/37736555)中介绍了作为分治策略的经典实例,即归并排序,并给出了递归形式和循环形式的c代码实例.但是归并排序有两个特点,一是在归并(即分治策略中的合并步骤)上花费的功夫较多,二是排序过程中需要使用额外的存储空间(异地排序算法<out of place sort>). 为了节省存储空间,出现了快速排序算法(原地排序in-place sort).快速排序是由东尼·霍尔所发展的一

java基本排序算法总结 (二)——快速排序法

在网上论坛上看了很多例子,快速排序算法是各公司面试笔试常考的一种算法,并且在平时的实际应用中表现形式和实现过程也是非常优秀,笔者认为快速排序法的思想就是基于冒泡排序法,冒泡排序法是将相邻元素进行比较来进行元素的交换排序,而快速排序法则通过确定一个基准元素,将比它大或者小的的元素分别归为一组从而进行递归排序,这里具体的实现结果有点像二分法的概念.在这里借用一张网上的图片来进一步解释 如图,首先我们以头一个元素57为基准点,首先与数组的最后一个元素进行比较,57>19则交换到高位,然后与数组第二位进

php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法

这里我们介绍一些常用的排序方法,排序是一个程序员的基本功,所谓排序就是对一组数据,按照某个顺序排列的过程. 充效率看 冒泡排序法<选择排序法<插入排序法 排序分两大类: 内部排序法 交换式排序法 冒泡法 基本思想: 冒泡排序法 案例: 1234567891011121314151617181920212223242526 //简单的$arr=array(0,5,-1); //现在我们把函数毛片封装成函数,利用以后使用//数组默认传递的是值,不是地址,&是地址符function bubb