給定乙個整數陣列 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
演算法穩定性
時間複雜度
空間複雜度
執行用時
記憶體消耗
自帶sort排序
×n·log(n)
log(n)
136ms
42m氣泡排序√n²
14988ms
40.4m
選擇排序×n²
12220ms
40.5m
插入排序 √n²
1888ms
40.4m
希爾排序
×n·log(n)
1116ms
40.2m
快速排序
×n·log(n)
log(n)
200 ms
54.1m
法一:sort 函式:v8中的sort()在10以內是插入排序,其餘是快排。
/*** @param nums
* @return
*/var sortarray = function(nums) ;
法二:氣泡排序:比較相鄰的元素,從開始第一對比到結尾的最後一對,如果前乙個比後乙個大,交換位置。
/*** @param nums
* @return
*///氣泡排序
var sortarray = function(nums)
for(let i=0;i法三:選擇排序:從陣列中選擇最小的元素,將它與陣列中第乙個元素交換位置,再從陣列剩下的元素中選擇出最小的元素,與陣列第二個位置交換順序。
/*** @param nums
* @return
*///選擇排序
var sortarray = function(nums)
for(let i=0;i法四:插入排序:每次都將當前元素插入到左側已經排序的陣列中,使得插入之後左側陣列依然有序。
/*** @param nums
* @return
*///插入排序
var sortarray = function(nums)
for(let i=1;i=0 && nums[j]>temp)
nums[j+1] = temp;
}return nums;
};
法五:希爾排序:使用插入排序,對間隔h的序列進行排序。通過不斷減小h,最後令h=1,就可以使得整個陣列是有序的。
/*** @param nums
* @return
*///希爾排序
var sortarray = function(nums)
// 初始步數
let gap = parseint(n/2);
// 逐漸縮小步數
while(gap)
else}}
gap = parseint(gap/2);
}return nums;
};
法六:快速排序:通過切分元素將陣列分成兩個子陣列,左子陣列<=切分元素,右子陣列》=切分元素,將兩個子陣列排序,也就是將整個陣列排序。
/*** @param nums
* @return
*///快速排序
var sortarray = function(nums)
let centerindex = parseint(n/2);
//找基準,並把基準從原陣列刪除
let centernum = nums.splice(centerindex,1)[0];
//定義左右陣列
let left = ;
let right = ;
//比基準小的放在left,比基準大的放在right
for(let i=0;i}
//遞迴
return sortarray(left).concat([centernum],sortarray(right));
};
每日刷題 leetcode912 排序陣列
題目描述 給定乙個陣列nums,將陣列公升序排序。示例 輸入 5,2,3,1 輸出 1,2,3,5 解法一 插入排序 超出 思想 從陣列的第二個數開始與前乙個數進行比較,如果後面的數比前面的數小,則進行交換。演算法複雜度為o n 2n 2 n2 題解 def sortarray self,nums ...
lintcode刷題 搜尋旋轉排序陣列
原題如下 搜尋旋轉排序陣列 假設有乙個排序的 按未知的旋轉軸旋轉的 陣列 比如,0 1 2 4 5 6 7 可能成為 4 5 6 7 0 1 2 給定乙個目標值進行搜尋,如果在陣列中找到目標值返回陣列中的索引位置,否則返回 1。你可以假設陣列中不存在重複的元素。您在真實的面試中是否遇到過這個題?ye...
912 排序陣列
今天的每日一題是排序,這是乙個入門問題。有多種解法,當然最簡單是直接呼叫sort方法進行排序,但是這對於練習並沒有什麼意義 題目鏈結 思路1 快排 每一次劃分pivot左邊小於pivot右邊大於pivot。遞迴劃分左邊,遞迴劃分右邊。思路2 歸併排序,先讓子串行有序,然後合併兩個有序陣列。流程 遞迴...