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

LeetCode初中級(jí)算法題解:排序算法介紹篇

開發(fā) 前端
搜集題目的難度是在簡(jiǎn)單級(jí)別和中級(jí)級(jí)別,也是面試常考的題目。題目的題解,使用的開發(fā)語(yǔ)言是 Swift。

引言:

??搜集題目的難度是在簡(jiǎn)單級(jí)別和中級(jí)級(jí)別,也是面試常考的題目。題目的題解,使用的開發(fā)語(yǔ)言是 Swift。

??因?yàn)轭}目的描述很長(zhǎng),以及有各種案例提示,為了不占篇幅,所以沒(méi)有展示出來(lái),大家可以直接通過(guò)題號(hào)查詢,或者通過(guò)搜索關(guān)鍵字去查看題目的描述。

文章的寫作順序是:

1. 展示題號(hào)和以及題目的鏈接

2. 核心思想的講述

3. 代碼實(shí)現(xiàn)

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

??Author: JefferyYu

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

1. 冒泡排序

2. 選擇排序

3. 插入排序

4. 快速排序

1.冒泡排序O( n2 )

1.1 核心思想:

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

1.2 代碼實(shí)現(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 核心思想:

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

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

2.2 代碼實(shí)現(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 算法思想

將第一待排序序列第一個(gè)元素看做一個(gè)有序序列,把第二個(gè)元素到最后一個(gè)元素當(dāng)成是未排序序列。

從頭到尾依次掃描未排序序列,將掃描到的每個(gè)元素插入有序序列的適當(dāng)位置。

3.2 代碼實(shí)現(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 算法思想

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

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

4.2 代碼實(shí)現(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個(gè)大數(shù)組被分割成了左邊和右邊2個(gè)數(shù)組】
// 將pivot的位置拋出來(lái),作為遞歸的時(shí)候的左邊數(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
}
}
}
//將軸點(diǎn)元素放到最終的位置, 此時(shí)beginend是重合的。所以下面使用begin或者end都是可以的
nums[begin] = pivot
return begin
}
責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2020-07-13 11:00:06

前端JavaScript自測(cè)清單

2021-04-15 09:36:44

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

2021-11-05 22:47:44

冒泡排序選擇插入

2023-10-05 09:01:05

插入排序對(duì)象序列log2i

2019-09-17 16:30:18

java排序算法

2015-08-26 10:13:55

排序算法總結(jié)

2022-12-26 00:00:00

排序算法洗牌算法算法

2012-01-09 14:29:15

Java算法

2011-04-20 13:56:08

選擇排序

2011-04-20 14:07:37

冒泡排序

2011-04-20 14:19:00

希爾排序

2011-04-20 15:20:03

快速排序

2021-01-19 07:02:26

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

2011-04-20 15:06:44

堆排序

2023-04-27 09:13:20

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

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安卓開發(fā)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 日本偷偷操 | 久草在线中文888 | 亚洲精品无 | 婷婷不卡 | 欧美日韩中文在线 | 日本久久网 | 在线观看av网站永久 | 中文字幕一区二区三区不卡 | 一区二区三区在线免费观看 | 精品久久久久一区二区国产 | 国产在线一区观看 | 视频一区中文字幕 | 欧美日韩中文国产一区发布 | 欧美精品一区三区 | 九九九视频在线观看 | 国产一区二区精品在线 | 偷拍亚洲色图 | 国产精品综合色区在线观看 | www.97国产 | 国产精品久久久久久久久久了 | 成年人在线视频 | 国产传媒视频在线观看 | 久久福利 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 伊人网站 | 欧美成ee人免费视频 | av免费看片 | 国产一级片网站 | 天天操夜夜爽 | 精品av| 精品久久久久久久 | 在线播放中文字幕 | 亚洲精品视频免费观看 | 亚洲图片一区二区三区 | 亚洲精品天堂 | 国产精品久久久久久238 | 国产精品福利网站 | 亚洲视频免费在线 | 国产视频1区2区 | 视频一区二区在线观看 | 国产午夜精品一区二区 |