/**
* 快速排序
* 1、劃分思想
* 2、遞迴
* @author wangyancheng
* @version 2014-4-29
*/public class quicksort
public void dosort()
/*** 排序
* 遞迴呼叫
* @param left
* @param right
*/private void innersort(int left, int right) else
}/**
* 劃分
* @param left
* @param right
* @param pivot 樞紐
* @return
*/private int partitionit(int left, int right, int pivot)
while (rightptr > 0 && dataarr[--rightptr] > pivot)
if (leftptr >= rightptr) else
}swap(leftptr, right);
doprint();
return leftptr;
}/**
* 交換
* @param leftptr
* @param rightptr
*/private void swap(int leftptr, int rightptr)
/*** 列印當前陣列元素
*/public void doprint()
/*** 測試入口
* @param args 引數列表
*/public static void main(string args)
dataarr = new int;
quicksort qsinst = new quicksort(dataarr);
qsinst.doprint();
qsinst.dosort();
qsinst.doprint();
}}
輸出:
[2, 61, 27, 21, 4, 1, 74, 40, 90, 33]
劃分:left:0,right:9,pivot:33
[2, 1, 27, 21, 4, 33, 74, 40, 90, 61]
左區域排序:left:0,right:4
劃分:left:0,right:4,pivot:4
[2, 1, 4, 21, 27, 33, 74, 40, 90, 61]
左區域排序:left:0,right:1
劃分:left:0,right:1,pivot:1
[1, 2, 4, 21, 27, 33, 74, 40, 90, 61]
左區域排序:left:0,right:-1
右區域排序:left:1,right:1
右區域排序:left:3,right:4
劃分:left:3,right:4,pivot:27
[1, 2, 4, 21, 27, 33, 74, 40, 90, 61]
左區域排序:left:3,right:3
右區域排序:left:5,right:4
右區域排序:left:6,right:9
劃分:left:6,right:9,pivot:61
[1, 2, 4, 21, 27, 33, 40, 61, 90, 74]
左區域排序:left:6,right:6
右區域排序:left:8,right:9
劃分:left:8,right:9,pivot:74
[1, 2, 4, 21, 27, 33, 40, 61, 74, 90]
左區域排序:left:8,right:7
右區域排序:left:9,right:9
[1, 2, 4, 21, 27, 33, 40, 61, 74, 90]
資料結構基礎整理 排序 03 堆排序
堆排序 英語 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。堆是具有以下性質的一棵樹 s是要需要調整堆結構的順序表的下標元素 調整完後使之成為大頂堆,m是堆的大小 void he...
資料結構 演算法 03
1.棧結構實現 棧可以用順序表實現,也可以用鍊錶實現。棧的操作 stack 建立乙個新的空棧 push item 新增乙個新的元素item到棧頂 pop 彈出棧頂元素 peek 返回棧頂元素 is empty 判斷棧是否為空 size 返回棧的元素個數 2.佇列 佇列 queue 是只允許在一端進行...
資料結構(03) 單鏈表
鍊錶的節點均單向指向下乙個節點,形成一條單向訪問的資料鏈。typedef struct linknode linknode,linklist 鍊錶節點 鍊錶 bool initlist linklist l 構造乙個空的單鏈表 l bool listinsert front linklist l,l...