1. 程式人生 > >資料結構和演算法之棧排序

資料結構和演算法之棧排序

題目:兩組數,左邊為已升序排列稱為S,右邊的未排序稱為R,在空間複雜度為O(1)的情況下將所有數排序

思路:兩組數為兩個棧,S是可以為空的。迴圈以下基本操作,直到R為空:

     彈出R的棧頂,用變數T儲存,由於S為升序排列,所以棧頂為最大,那麼只要S的

     棧頂比T大就將S的棧頂彈出並推進R,直到S的棧頂比T小,此時將T推入S

程式碼(JS版):

 1 function stackInsertSort(R) {
 2     var S = [];
 3     while(R.length){
 4         var T = R.pop();
5 while(S.length && S[S.length-1] > T){ 6 R.push(S.pop()) 7 } 8 S.push(T); 9 } 10 return S 11 } 12 13 var n = 1000; 14 var R = []; 15 for (var i = 0; i < n; i++) { 16 R.push(Math.floor(Math.random()*10000)) 17 } 18 19 console.log(R) 20 var t1 = Date.now()
21 var s = stackInsertSort(R) 22 console.log("time:----------") 23 console.log(Date.now() - t1) 24 console.log("----------") 25 console.log(s)

 

延伸: 直方圖最大面積問題