快速排序法 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("排序后:");
         print(a);
     }
     public int getMiddle(int[] list,int low,int high){
            int temp=list[low];//数组的第一个作为中轴
            while(low<high){
                while(low < high && list[high]>=temp) high--;
                list[low]=list[high];//比中轴小的数移到低端
                while(low < high && list[low]<=temp) low++;
                list[high]=list[low];//比中轴大的移动到高端
            }
           list[low]=temp;//中轴记录到为尾
          // System.out.println("low==high? "+(low==high)+"low= "+low+"high= "+high);
           return low;//返回中轴位置
           //判断得知,最后三个中轴为3 2 0
     }
     public void quickSort(int a[],int low,int high){
         if(low<high){
             int middle=getMiddle(a, low, high);//将数组a一分为二
             quickSort(a, low, middle-1);//对小于中轴的部分递归排序
             quickSort(a, middle+1, high);//对大于中轴的部分递归排序
         }
     }
      void print(int []a){
         for(int s: a)
             System.out.print(s+" , ");
        }
}   

本算法应做到信手拈来。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-07-30 18:42:04

快速排序法 quickSort---java的相关文章

快速排序法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

排序算法之JAVA终极快速排序法

package net.qh.test.sort; import java.util.ArrayList; import java.util.Calendar; import java.util.List; /** * Created by Administrator on 2016/03/01. */ public class TermSimpleQuick { public int[] sort(int[] arr,int left,int right){ if ( arr == null

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

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

快速排序法(一)

说明快速排序法(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

排序算法五:随机化快速排序(Randomized quicksort)

上一篇提到,快速排序的平均时间复杂度是O(nlgn),比其他相同时间复杂度的堆排序.归并排序都要快,但这是有前提的,就是假定要排序的序列是随机分布的,而不是有序的.实际上,对于已经排好的序列,如果用快速排序时间复杂度是O(n2).为应对这样的有序序列,于是出现了本篇要讲的随机化快速排序(Randomized quicksort). 快速排序在选主元(pivot)时,总是选择第一个:随机化快速排序的思想是,随机从序列中选择一个作为主元. (一)算法实现 1 protected void quick

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