1. 程式人生 > >java快速排序兩種方法

java快速排序兩種方法

public class FaskSort {
    private static int count0 = 0;
    public  static void sort(int[] array){
        if(array.length > 0){
            sort(array, 0, array.length - 1);
        }
    }

    private static void sort(int[] array, int low, int high){
        count0++;
        int p_pos = low;// 分界索引
        int p_voint = array[low];// 基值
        int temp;
        for (int i = low + 1; i <= high; i++){
            if(array[i] < p_voint){
                p_pos++;
                if(p_pos != i){// 索引相同避免交換
                    temp = array[p_pos];
                    array[p_pos] = array[i];
                    array[i] = temp;
                }
            }
        }
        // 把基準值放到排好序的最後位置
        if(p_pos != low){
            temp = array[p_pos];
            array[p_pos] = array[low];
            array[low] = temp;
        }
        if(p_pos - 1 > low){
            sort(array, low, p_pos - 1);
        }
        if(high > p_pos + 1){
            sort(array, p_pos + 1, high);
        }
    }

    private static int count1 = 0;

    public static void sort1(int[] array){
        if(array.length > 0){
            sort1(array, 0, array.length - 1);
        }
    }
    private static void sort1(int[] array, int low, int high){
        count1++;
        int i = low +1;
        int j = high;
        int key = array[low];
        int temp;
        while (i < j){
            while(i < j && array[i] < key){// i < j時從左往右找大於key的 索引
                i++;
            }
            while(i < j && array[j] > key ){// i < j時從右往左找小於key的 索引
                j--;
            }
            if(i < j){// 然後交換
                temp = array[j];
                array[j] = array[i];
                array[i] = temp;
            }
        }
        if (array[i] >= key) {// 由於上面while退出條件的缺陷 進行修正,此時i索引處左邊全是小於key
            i--;
        }
        temp = array[i];
        array[i] = array[low];
        array[low] = temp;
        if(i -1 > low){
            sort1(array, low, i -1);
        }
        if(high > i + 1){
            sort1(array, i + 1, high);
        }
    }

    public static void main(String[] args) {
        {
            int[] array = {6, 4, 7, 5, 9, 3, 2, 1, 8};
            sort(array);
            System.out.println(Arrays.toString(array));
            System.out.println(count0);
        }
        {
            int[] array1 = {6, 4, 7, 5, 9, 3, 2, 1, 8};
            sort1(array1);
            System.out.println(Arrays.toString(array1));
            System.out.println(count1);
        }
    }
}

相關推薦

java快速排序方法

public class FaskSort { private static int count0 = 0; public static void sort(int[] array){ if(array.length > 0){

Java中ArrayList的排序方法以及遍歷的程式碼

方法一: 在類的定義中實現Comparable介面中的compareTo()方法,然後呼叫Collections.sort()進行排序: import java.util.Scanner

快速排序方式實現及優化總結

 今天看了快速排序,現在對自己的已知的方法進行總結,歡迎拍磚。         快速排序被認為是20世紀十大演算法之一,在排序中,快速排序其實就是我們前面認為最慢的氣泡排序的升級,它們都屬於交換排序類。即快排也是通過不斷比較和移動交換來實現排序的,不過它的實現,增大了記

Java 判斷閏年 方法

方法一: public class Bissextile { boolean bissextile(int year){ //建立boolean型別的方法 if(year % 4 == 0 && year % 100 != 0 || year % 4

(好使)用Java集合中的Collections.sort方法對list排序方法

      ret = String.valueOf(m2.invoke(((E)b), null).toString().length()).compareTo(String.valueOf(m1.invoke(((E)a), null).toString().length()));          if

Java程式設計之TreeSet排序解決方法(1)元素自身具備比較功能,元素需要實現Comparable介面覆蓋compare(2)建立根據自定義Person類的name進行排序的Comparator

       當很多人問我讀研到底好不好的時候,我總是說上研很苦逼,讀完研之後都不知道自己能不能找到工作,所以不建議同學們讀研~即使要讀也讀一個985或者211的研究生,這是我肺腑之言。但還有一半我沒說完,讀研的時候你可能會找到你喜歡的活動,會遇到一些願意和你一起玩的玩伴,

java ArrayList的排序方法

1.ArrayList使用排序的初衷    我們知道ArrayList的好處是可以不用限定容器的大小,他會根據元素的增加自己擴大。但是儲存進去的資料型別都會變成object,雖然每個元素有自己的index,但不像陣列的下標可以更加方便的操作。那我們平時學習的選擇排序啊快速排序

程式設計之法第二章【快速排序方法

花了兩個多小時重新複習了快速排序,之前以為懂,但是真正實踐的時候才發現自己錯了。 快速排序有兩種實現方式。都是兩個指標,不過之前學的一種是一個從頭開始掃,一個從尾開始掃。另外一種是兩個都是從頭開始掃,不過一個比另外一個前一個位置。 如果真正的理解快排的原理,對於一些排序的問

快速生成較大文本文檔的方法

修改 cmd命令 style ext 百度 bsp 都是 進行 tex 在學習用FTP發送文件的過程中,需要用到一個比較大的文件進行傳輸測試。因此百度了一下如何生成指定大小文件的方法,發現在WINDOWS下有兩種方法比較實用,記錄如下: 第一種方法: 在運行窗口中輸入

Java Web程序中使用監聽器可以通過以下方法

output pla extend 標識 ade 介紹 gets str override 之前學習了很多涉及servlet的內容,本小結我們說一下監聽器,說起監聽器,編過桌面程序和手機App的都不陌生,常見的套路都是拖一個控件,然後給它綁定一個監聽器,即可以對該對象的事件

java打印等腰三角形的方法!(根據行數,根據底邊長度)

triangle class [] 執行 next() result scanner 1-1 next 首先來看根據用戶輸入的底邊的長度判斷: 1 package cn.edu.nwpu.java; 2 3 import java.util.Scanner; 4

java快排(方法

span ast [] ati pub 方法 color 整體 blog 快排是最基礎的排序算法之一,今天來回顧一下。 public class QuickSort { public static void quickSort(int[] ar

java String轉Long方法區別

基本數據 ring oat 兩種 基本 ava ger parse 兩種方法 第一種:包裝類型:Byte,Integer,Short,Long,Boolean,Character,Float,Double等8種 Long.valueOf("String")返回Long包裝

java——快速排序基準位置的選取方法快速排序優化

一、 快速排序基準位置的選取方法 1.固定位置法(就是選取的基準是固定的、一般是陣列的第一個元素) 2.隨機選取基準法 import java.util.Arrays; import java.util.Random; /** * @ClassName TestDemo3

Java實現生產者消費者模式的方法

1、 利用 Object的 wait/notify,和非阻塞佇列實現 import java.util.PriorityQueue; public class Test{ private int size=10; private PriorityQueue&

java中字串 按照字元挨個換行輸出-方法

方案1:將String 字串 轉化為char 陣列 toCharArray public static void main(String[] args) { String s="aaahssjshs222"; // 轉化為字元陣列。 char[] c=s

java中產生隨機數的方法

1.可以使用Java api中java.lang包中的Math類,其中Math.random()方法是一個可以產生[0.0,1.0]區間內的一個雙精度浮點數的方法 如: 產生一個100以內的整數:int x=(int)(Math.random()*100); 2.Random random =

java程式將漢字轉成拼音的方法-----------------第二方式

同樣需要下載pom檔案,匯入相應的jar包!!!!!! import net.sourceforge.pinyin4j.PinyinHelper;   import net.sourceforge.pinyin4j.format.HanyuPi

java實現快速排序常規的,一是左程雲的方式。

java實現快速排序: 一:先來一個常規快排: 這個方式就是我們的基準值一直在兩個邊界徘徊,要麼在less的較大邊界,要麼是在more的小邊界,其實就是在居中位置徘徊。 package chapter1; //來一個快排,常規快排 public class QuickSort {

List集合序列排序方法

首先講一下Comparable介面和Comparator介面,以及他們之間的差異。有助於Collections.sort()方法的使用。請參考 1.Comparable自然規則排序//在自定義類Student裡面實現Comparable介面,並重寫抽象方法compareTo(Student o);//Col