刷題60 排序陣列

2022-07-28 04:09:09 字數 2208 閱讀 8938

給定乙個整數陣列 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 歸併排序,先讓子串行有序,然後合併兩個有序陣列。流程 遞迴...