自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

LeetCode初中級算法題解:排序算法介紹篇

開發(fā) 前端
搜集題目的難度是在簡單級別和中級級別,也是面試??嫉念}目。題目的題解,使用的開發(fā)語言是 Swift。

引言:

??搜集題目的難度是在簡單級別和中級級別,也是面試??嫉念}目。題目的題解,使用的開發(fā)語言是 Swift。

??因為題目的描述很長,以及有各種案例提示,為了不占篇幅,所以沒有展示出來,大家可以直接通過題號查詢,或者通過搜索關(guān)鍵字去查看題目的描述。

文章的寫作順序是:

1. 展示題號和以及題目的鏈接

2. 核心思想的講述

3. 代碼實現(xiàn)

最后本文提供的代碼都是在LeetCode上提交通過的。

??Author: JefferyYu

1. Sort Algorithm Implementation Questions(排序算法)

1. 冒泡排序

2. 選擇排序

3. 插入排序

4. 快速排序

1.冒泡排序O( n2 )

1.1 核心思想:

每次選擇最小的往上冒,發(fā)現(xiàn)比我小,就換位置

1.2 代碼實現(xiàn):

func bubbleSort(_ nums: inout [Int]) {
for i in 0..<nums.count {
for j in i+1 ..< nums.count {
if nums[j] < nums[i] {
let temp = nums[i]
nums[i] = nums[j]
nums[j] = temp
}
}
}
}

2.選擇排序 O( n2 )

2.1 核心思想:

選擇排序的意思就是:選好了,再換位置

具體的實現(xiàn)就是每次保存最小的那個下標,然后到最后再換一次即可

2.2 代碼實現(xiàn):

func selectionSort(_ nums: inout [Int]) {
for i in 0..<nums.count {
var min = i
for j in i+1 ..< nums.count {
if nums[j] < nums[min] {
min = j
}
}
let temp = nums[i]
nums[i] = nums[min]
nums[min] = temp
}
}

3. 插入排序 O( n2 )

3.1 算法思想

將第一待排序序列第一個元素看做一個有序序列,把第二個元素到最后一個元素當成是未排序序列。

從頭到尾依次掃描未排序序列,將掃描到的每個元素插入有序序列的適當位置。

3.2 代碼實現(xiàn)

func insertSort(_ nums: inout [Int]) {
for i in 1..<nums.count {
for j in (0..<i).reversed() {
if j > nums[i] {
nums.swapAt(j, j+1)
}
}
}
}

4. 快速排序 O( NLogN )

4.1 算法思想

快排的思想還是很有用的,就是把大于我的部分放在我的右邊,小于我的部分放在我的左邊。

具體的大家想看實現(xiàn)的詳細的情況,可以看我寫的這篇文章:一文讀懂快速排序

4.2 代碼實現(xiàn)

func quickSort(nums: inout [Int]) -> [Int] {
sort(nums: &nums, begin: 0, end: nums.count)
return nums
}

func sort(nums: inout [Int], begin: Int, end: Int) {
if end - begin < 2 { return }
var rBegin = begin; var rEnd = end
let mid = pivotIndex(nums: &nums, begin: &rBegin, end: &rEnd)
sort(nums: &nums, begin: begin, end:mid)
sort(nums: &nums, begin: mid + 1, end: end)
}

//【1個大數(shù)組被分割成了左邊和右邊2個數(shù)組】
// 將pivot的位置拋出來,作為遞歸的時候的左邊數(shù)組的end和右邊數(shù)組的begin
private func pivotIndex(nums: inout [Int], begin: inout Int, end: inout Int) -> Int {
let pivot = nums[begin]
end -= 1

while begin < end {
while begin < end {
if pivot < nums[end] {
end -= 1
}else {
nums[begin] = nums[end]
begin += 1
break
}
}

while begin < end {
if pivot > nums[begin] {
begin += 1
}else {
nums[end] = nums[begin]
end -= 1
break
}
}
}
//將軸點元素放到最終的位置, 此時beginend是重合的。所以下面使用begin或者end都是可以的
nums[begin] = pivot
return begin
}
責任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2020-07-13 11:00:06

前端JavaScript自測清單

2021-04-15 09:36:44

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-11-05 22:47:44

冒泡排序選擇插入

2023-10-05 09:01:05

插入排序對象序列log2i

2015-08-26 10:13:55

排序算法總結(jié)

2019-09-17 16:30:18

java排序算法

2022-12-26 00:00:00

排序算法洗牌算法算法

2012-01-09 14:29:15

Java算法

2011-04-20 14:07:37

冒泡排序

2011-04-20 13:56:08

選擇排序

2011-04-20 14:19:00

希爾排序

2021-01-19 07:02:26

算法數(shù)據(jù)結(jié)構(gòu)堆排序

2011-04-20 15:06:44

堆排序

2011-04-20 15:20:03

快速排序

2020-09-14 14:47:13

排序算法

2014-10-30 15:14:54

快速排序編程算法

2023-04-27 09:13:20

排序算法數(shù)據(jù)結(jié)構(gòu)

2014-10-30 15:59:10

2022-01-06 16:20:04

Java排序算法排序

2025-03-28 11:10:44

點贊
收藏

51CTO技術(shù)棧公眾號