今天的每日一題是排序,這是乙個入門問題。有多種解法,當然最簡單是直接呼叫sort方法進行排序,但是這對於練習並沒有什麼意義
題目鏈結
思路1:快排 。每一次劃分pivot左邊小於pivot右邊大於pivot。遞迴劃分左邊,遞迴劃分右邊。
思路2:歸併排序,先讓子串行有序,然後合併兩個有序陣列。流程
遞迴遞迴
合併兩個陣列
終止條件 l < r
這個過程與樹的後序遍歷類似
思路一
思路二class
solution
void
randchoice
(vector<
int>
& nums,
int l,
int r)
intpartion
(vector<
int>
& nums,
int l,
int r)
nums[l]
= temp;
return l;
} vector<
int>
sortarray
(vector<
int>
& nums)
};
眾所周知,快排是不穩定排序演算法,因此需要隨機選擇,pivot關鍵字。測試了未隨機選擇與隨機選擇class
solution
if(nums[i]
>=nums[j])}
while
(i<=mid)
while
(j<=r)
for(
int k=l;k<=r;k++)}
void
mergesort
(vector<
int>
& nums,
int l,
int r)
} vector<
int>
sortarray
(vector<
int>
& nums)
};
發現提交結果如下
912 排序陣列
給你乙個整數陣列 nums,請你將該陣列公升序排列。示例 1 輸入 nums 5,2,3,1 輸出 1,2,3,5 示例 2 輸入 nums 5,1,1,2,0,0 輸出 0,0,1,1,2,5 1 nums.length 50000 50000 nums i 50000 排序的方法有很多種,本文採...
leetcode 912 排序陣列
給定乙個整數陣列 nums,將該陣列公升序排列。示例 1 輸入 5,2,3,1 輸出 1,2,3,5 示例 2 輸入 5,1,1,2,0,0 輸出 0,0,1,1,2,5 1 a.length 10000 50000 a i 50000實際上python自帶的sort函式是最好的,用了timesor...
leetcode 912 排序陣列
這是乙個排序題,都是老生常談的東西了,之前用的排序演算法都是通過比較大小進行排序,貼一下不用比較大小的計數排序的 計數排序的思想是 對於陣列中乙個需要排序的數字x來說,算出陣列中小於等於它的數字個數便可得出該數在有序陣列中的位置。該演算法只適用於整數陣列,時間複雜度為o n k o n k o n ...