問題:給定陣列arr,元素個數為n,將其排序後元素移動的順序不超過k,其中k《分析:
1.氣泡排序,選擇排序,快速排序,歸併排序等排序時間複雜度與陣列狀態無關。
2.插入排序複雜度為o(n*k)
3.改進後的堆排序可以做到o(n*logk)
改進後的堆排序:
1.考慮到每次移動不超過k,則最小的元素在0..k中。
2.將0...k進行建小堆,得到最小元素arr[0]。
3.彈出堆頂,將下乙個元素不在堆內的元素置入堆頂,下濾。
4.重複3,直到無法新增新元素時,堆的最後乙個元素置入堆頂,刪除堆的最後乙個元素,下濾,彈出堆頂。
5.堆為空,陣列排序完成。
vector percdown(vector a,int p,intr) }
a[parent]=key;
return
a; }
vector
sortelement(vector a, int n, int
k) else
}return
res;
}
1.如果沒有空間複雜度限制,可以用雜湊表實現,時間複雜度o(n)
2.可以先排序,後判斷是否相同的值挨在一起。
3.空間複雜度o(1)的演算法中,考慮堆排序,且不能使用非遞迴。
1.確定最後位置last,last1,last2.
2.每次比較a1,a2的最後兩個元素,大的放入a1的尾部
3.重複,直到a2為空。得到陣列a1就是有序陣列。
經典排序演算法的經典問題
問題描述 乙個陣列只含有三種元素 0,1,2,不使用計數排序,將0放在1的左邊,2放在1的右邊。分析 1.可借鑑快排中劃分的思想。將陣列分為,arr,2.遍歷arr,當發現0時,0區向右擴,發現2時,2區向左擴,3.當前元素進入2區時,結束。vector sortthreecolor vector ...
經典排序演算法
排序分為內部排序和外部排序,內部排序是指待排序的資料都是在記憶體中的,例如陣列 外部排序指待排序資源在記憶體外,例如對檔案的排序。此篇說的是內部排序。通俗地來說,內部排序就是將一堆資料按一定規則對它進行排序。排序又分為穩定排序和不穩定的排序,如果初始序列ai,ak有序 ai ak 排序後變成了ak,...
經典排序演算法
1 氣泡排序 bubble sort 最簡單的排序方法是氣泡排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的 氣泡 較小的元素比較輕,從而要往上浮。在氣泡排序演算法中我們要對這個 氣泡 序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。...