java实现快速排序

快速排序的基本思想

通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序。

先看一下这幅图:

  把整个序列看做一个数组,把第零个位置看做中轴,和最后一个比,如果比它小交换,比它大不做任何处理;交换了以后再和小的那端比,比它小不交换,比他大交换。这样循环往复,一趟排序完成,左边就是比中轴小的,右边就是比中轴大的,然后再用分治法,分别对这两个独立的数组进行排序。

public int getMiddle(Integer[] list, int low, int high) {
        int tmp = list[low];    //数组的第一个作为中轴
        while (low < high) {
            while (low < high && list[high] > tmp) {
                high--;
            }
            list[low] = list[high];   //比中轴小的记录移到低端
            while (low < high && list[low] < tmp) {
                low++;
            }
            list[high] = list[low];   //比中轴大的记录移到高端
        }
        list[low] = tmp;              //中轴记录到尾
        return low;                   //返回中轴的位置
    }

  递归形式的分治排序算法:

public void _quickSort(Integer[] list, int low, int high) {
        if (low < high) {
            int middle = getMiddle(list, low, high);  //将list数组进行一分为二
            _quickSort(list, low, middle - 1);        //对低字表进行递归排序
            _quickSort(list, middle + 1, high);       //对高字表进行递归排序
        }
    }

  编写测试方法:

public class TestMain {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
         Integer[] list={34,3,53,2,23,7,14,10};
         QuicSort qs=new QuicSort();
         qs.quick(list);
         for(int i=0;i<list.length;i++){
             System.out.print(list[i]+" ");
         }
         System.out.println();
    }

}

  看一下打印结果吧:

2 3 7 10 14 23 34 53

   这样就排序好了,快速排序是对冒泡排序的一种改进,平均时间复杂度是O(nlogn)。

时间: 2024-10-18 13:56:06

java实现快速排序的相关文章

java之快速排序

//基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列. public static void main(String []args){      int arr[]={-1,-5,6,2,0,9,-3,-8,12,7};      QuickSort qs=new QuickSort();      qs.sort(0, arr.leng

Java算法快速排序

快速排序的原理:每次将序列以一个值为界限分成两组,在将两个序列分别以一个界限分成两组这样一直分下去. int[] a = {11,222,44,63,84,11,24,53,123,25,98,76,34}; 第一步:以34将数组a分成两组  11, 25, 24, 11              34,  63, 44, 53, 123, 222, 98, 76, 84 第二步:以11将11, 25, 24, 11分为两组  11, 11,     24, 25.以84将34,  63, 44

排序算法之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简单快速排序算法

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 SimpleQuick { public int[] sort(int[] arr,int left,int right){ if ( arr == null || a

JAVA排序--[快速排序]

1 package com.array; 2 3 public class Sort_Quick { 4 /* 5 * 项目名称:快速排序 ; 6 * 项目要求:用JAVA对数组进行排序,并运用快速排序算法; 7 * 作者:Sevck; 8 */ 9 public void sort(int left, int right, int array[]) { 10 int l = left; 11 int r = right; 12 int pirot = array[(left + right)

快速排序基本思想,递归写法,python和java编写快速排序

1.基本思想 快速排序有很多种编写方法,递归和分递归,分而治之法属于非递归,比递归简单多了.在这不使用代码演示.下面我们来探讨一下快速排序的递归写法思想吧. 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序.值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动. 2.python实现 # coding:ut

java算法 --快速排序

package Solve; import java.util.Scanner; public class Solve { static Scanner scan = new Scanner(System.in); public static void main(String[] args) { int[] num = { 100,40,60,87,34,11,56,0}; qsort(num,0,num.length - 1); for (int x:num) { System.out.pri

java中快速排序的理解以及实例

所谓的快速排序的思想就是,首先把数组的第一个数拿出来做为一个key,在前后分别设置一个i,j做为标识,然后拿这个key对这个数组从后面往前遍历,及j--,直到找到第一个小于这个key的那个数,然后交换这两个值,交换完成后,我们拿着这个key要从i往后遍历了,及i++;一直循环到i=j结束,当这里结束后,我们会发现大于这个key的值都会跑到这个key的后面,不是的话就可能你写错了,小于这个key的就会跑到这个值的前面:然后我们对这个分段的数组再时行递归调用就可以完成整个数组的排序. 用图形法表示由

Java使用快速排序法对数组进行排序

1 package com.yzy.test; 2 3 public class Test { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 int[] array = { 43, 64, 21, 6565, 3424, 22, 6523, 345 }; 10 ArraySort(array, 0, array.length - 1); 11 for (int i : array) { 12 S