1. 程式人生 > >JAVA實現排序-快速排序-棧實現快速排序

JAVA實現排序-快速排序-棧實現快速排序

package quick;


import java.util.Stack;


//迴圈實現
public class QuickStack {
public static void print(int[] arr){
for(int n=0;n<arr.length;n++){
System.out.print(arr[n]+" ");
}
System.out.println();
}

public static void fun(int[] a, int low, int high){
Stack<Integer> stack = new Stack<Integer>();
if(low < high){
stack.add(low);
stack.add(high);
while(!stack.isEmpty()){
int hi = stack.pop();
int lo = stack.pop();
int key = partition(a, lo, hi);
if(lo < key-1){
stack.push(lo);
stack.push(key-1);
}
if(hi > key){
stack.push(key+1);
stack.push(hi);//這樣,最後入棧的就是key右邊的部分,則下一次迴圈先處理key右邊的部分
}
}
}
}

public static int partition(int[] a, int low, int high){
int key = a[low];
while(low<high){
while(a[high]>=key&&low<high){//大於等於key的陣列元素不需要移動
high--;
}
a[low] = a[high];
while(a[low]<=key&&low<high){//小於於等於key的陣列元素不需要移動
low++;
}
a[high] = a[low];
}
a[low] = key;
print(a);
return low;
}

public static void main(String[] args) {
int[] arr = {49,38,65,97,76,13,27,49,55,4};
fun(arr, 0, arr.length-1);

}


}

相關推薦

第一次寫快速排序演算法出現溢位和排序錯誤的問題

從昨天開始看快速排序演算法, 自己看了一會明白了快速排序演算法的原理,想把它寫出來。可是說起來簡單做起來難,本應該是很簡潔的程式碼我卻怎麼也寫不對,尤其是快速排序演算法有遞迴呼叫,很鍛鍊思維能力。 剛剛按照網上的一段程式進行編寫,一邊看示例程式碼一邊寫自己的程式碼,卻出現了

Java資料結構】用實現字尾表示式求值

今天在學資料結構,自己擼一段用棧來實現字尾表示式求值的程式碼,能改進的地方還有很多,在此先mark一下 package StackPractice; import java.util.Scanner; import java.util.Stack; im

java中基於陣列的實現

在java中利用陣列來實現棧以及相關操作。 首先我們要新建一個類,該類中new一個固定大小的陣列,來充當我們的棧,來容納入棧的資料。 在該類中我們可以對棧進行出棧入棧,擴容,和獲取棧頂元素等操作。在該類中我們使用了泛型 和Object類來建立陣列,以便能讓我們的棧存放任

《劍指Offer》Java語言-用兩個實現佇列

題目描述 用兩個棧來實現一個佇列,完成佇列的Push和Pop操作。 佇列中的元素為int型別。 思路 這個題目有幾種思路。第一種,把第二個棧作為輔助空間。當push操作時,壓入到第一個棧中。當要pop操作的時候,將元素從第一個棧中彈出到第二個棧中,然後出棧

JAVA實現排序-快速排序-實現快速排序

package quick;import java.util.Stack;//迴圈實現public class QuickStack {public static void print(int[] arr){for(int n=0;n<arr.length;n++){S

資料結構之---C語言實現括號匹配(實現

wechat:812716131 ------------------------------------------------------ 技術交流群請聯絡上面wechat ----------------------------------------------

排序算法入門之快速排序java實現

大小 ava 相對 其余 時間 個數 技術分享 算法 元素交換   快速排序也是一種分治的排序算法。快速排序和歸並排序是互補的:歸並排序將數組分成兩個子數組分別排序,並將有序的子數組歸並以將整個數組排序,會需要一個額外的數組;而快速排序的排序方式是當兩個子數組都有序

Java常用的八種排序演算法與程式碼實現(二):歸併排序法、快速排序

注:這裡給出的程式碼方案都是通過遞迴完成的 --- 歸併排序(Merge Sort):   分而治之,遞迴實現   如果需要排序一個數組,我們先把陣列從中間分成前後兩部分,然後對前後兩部分進行分別排序,再將排好序的數組合並在一起,這樣整個陣列就有序了   歸併排序是穩定的排序演算法,時間

java 實現 常見排序演算法(三)快速排序

大家好,我是烤鴨:        今天分享一下基礎排序演算法之快速排序。快速排序是內部排序(基於比較排序)中最好的比較演算法。   1.     快速排序:

七大排序演算法(冒泡,選擇,插入,二分法排序,希爾,快速,合併,堆排序)的java實現(14/8/3更新加入二分排序

氣泡排序 思路:就是每次將最大或最小的元素放到陣列的最後,so easy!時間複雜度為(O(n^2)) public class BubbleSort { public static void bubbleSort(int[] a) { for (int j = 1;

java簡單實現冒泡、快速、選擇、插入排序演算法

程式主要實現了氣泡排序、快速排序、選擇排序、插入排序演算法 資料類Data.java 排序演算法類SortMethods.java 主類Main.java 示例程式: 資料類Data.java package callclasstestoop;

八大排序快速排序算法-python實現

com 現在 主函數 port 右移 們的 冒泡 實現 odin 快排就是折中時間和空間的一個算法,可以說是較為高效的算法,平時用用他沒啥大問題。 自己也看到個比較形象生動的例子,為了讓大家能夠看的比較清楚,我就直接轉過來給大家看了哈!但是我使用python實現的: 註意以

快速排序的兩種實現方法(js)

while 交換 splice rt+ dex 進行 return ont mat 快速排序的基本思想:通過一趟排序,將待排記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另外一部分記錄的關鍵字小,則可分別對著兩部分記錄繼續進行排序,以達到整個序列有序的目的。------

快速排序的遞迴實現

/*把陣列arr按照一個支點分成左右兩個部分 左邊比支點小,右邊比支點大,再返回支點pivot*/ int partition(int *arr,int low, int high){ int pivot = arr[low]; //low為陣列的第一個元素的位置,high為陣列

快速排序c 和c++實現

#include <iostream> #include <vector>   using namespace std;   void Qsort(int a[], int low, int high) {     if(

歸併排序,堆排序快速排序的講解與實現

前言 本文主要講的是歸併排序,堆排序和快速排序的原理與實現。當然我的實現不一定不是最好的,如果有更好的實現大家也可以在評論區貼出更好的實現程式碼。 時間複雜度的計算:時間複雜度大概的意思是以每一條執行的語句為單位,一個排序演算法在隨著資料的增大時間上會以什麼形式去增長(這

快速排序法(golang實現

快速排序是由東尼·霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他Ο(n

C語言利用快速排序(QuickSort)實現對陣列的排序

 快速排序是一種交換排序,是對氣泡排序的改進 利用氣泡排序的特性,對目標進行分段冒泡 #include "stdio.h" int a[6];//定義一個數組,長度為6,實際存放5個元素, /** * 快速排序函式 * @param left 最左邊的指標 * @param

排序演算法之快速排序,氣泡排序用python程式碼實現

一、快速排序 1.在列表中選出一個基準數(通常為列表的第一個數) 2.將列表中小於基準數的資料移到基準列表的左邊,將大於基準數的資料移到基準數的右邊 3.對於基準數左,右兩邊的列表,不斷重複以上兩個過程,直到每個子集只有一個元素, 即為全部有序的. def qu

【轉載】快速排序(三種演算法實現和非遞迴實現)

原文地址 python實現: import random a = [4,1,7,6,9,2,2,3,5,7,8,9,3,1,2,3,4,5,8,0,3,5] b = [4,1,7,6,9,2,8,0,3,5] def twoPointerSort(nums,le