成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 前端
搜集題目的難度是在簡單級別和中級級別,也是面試常考的題目。題目的題解,使用的開發語言是 Swift。

引言:

??搜集題目的難度是在簡單級別和中級級別,也是面試常考的題目。題目的題解,使用的開發語言是 Swift。

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

文章的寫作順序是:

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

2. 核心思想的講述

3. 代碼實現

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

??Author: JefferyYu

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

1. 冒泡排序

2. 選擇排序

3. 插入排序

4. 快速排序

1.冒泡排序O( n2 )

1.1 核心思想:

每次選擇最小的往上冒,發現比我小,就換位置

1.2 代碼實現:

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 核心思想:

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

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

2.2 代碼實現:

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 代碼實現

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 算法思想

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

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

4.2 代碼實現

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個大數組被分割成了左邊和右邊2個數組】
// 將pivot的位置拋出來,作為遞歸的時候的左邊數組的end和右邊數組的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
}
責任編輯:姜華 來源: 今日頭條
相關推薦

2020-07-13 11:00:06

前端JavaScript自測清單

2021-04-15 09:36:44

Java數據結構算法

2021-11-05 22:47:44

冒泡排序選擇插入

2023-10-05 09:01:05

插入排序對象序列log2i

2019-09-17 16:30:18

java排序算法

2015-08-26 10:13:55

排序算法總結

2022-12-26 00:00:00

排序算法洗牌算法算法

2012-01-09 14:29:15

Java算法

2011-04-20 13:56:08

選擇排序

2011-04-20 14:19:00

希爾排序

2011-04-20 14:07:37

冒泡排序

2011-04-20 15:06:44

堆排序

2011-04-20 15:20:03

快速排序

2021-01-19 07:02:26

算法數據結構堆排序

2023-04-27 09:13:20

排序算法數據結構

2014-10-30 15:14:54

快速排序編程算法

2020-09-14 14:47:13

排序算法

2022-01-06 16:20:04

Java排序算法排序

2014-10-30 15:59:10

2019-09-21 20:57:59

Android安卓開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品一区二区三区四区视频 | av在线播放国产 | 成人在线观看免费视频 | 日韩精品成人 | 秋霞在线一区 | 亚洲午夜在线 | 久久久国产网站 | 免费视频成人国产精品网站 | 成人精品在线观看 | 99精品国产成人一区二区 | 91久久北条麻妃一区二区三区 | 国产精品久久av | 精久久 | 久久久久国产精品 | 国内成人免费视频 | 一区二区日韩精品 | 九九九视频在线 | av在线免费观看网址 | avmans最新导航地址 | 亚洲精久久久 | a毛片| 国产乱人伦精品一区二区 | 欧美日韩高清免费 | 欧美午夜精品 | 亚洲乱码一区二区三区在线观看 | 国产综合精品一区二区三区 | 精品一区二区三区中文字幕 | 九九久久精品 | 国产91av视频在线观看 | 国产专区在线 | 久久福利电影 | 高清亚洲 | 国产精品一区二区无线 | 久久精品国产99国产精品亚洲 | jizz18国产| 日本欧美在线 | 欧美中文字幕一区二区三区 | 日本高清不卡视频 | 亚洲国产精品久久久 | 欧美日韩在线免费观看 | 亚洲免费在线观看 |