题目:两组数,左边为已升序排列称为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)
延伸: 直方图最大面积问题