IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 选择排序(selectSort) -> 正文阅读

[数据结构与算法]选择排序(selectSort)

普通选择排序:
算法思路:
1.在未排序序列中找到最小(大)元素,存放到未排序序列的起始位置
2.从剩余未排序元素中继续寻找最小(大)元素,然后放到未排序序列的起始位置
3.以此类推,直到所有元素均排序完毕
平均时间复杂度:O(n2)
数据比较次数:(n - 1) + (n - 2) + (n - 3) + …… + 1 = 1/2n2 - 1/2n
数据交换次数:(n - 1)
总复杂度:1/2n2 + 1/2n - 1
最佳时间复杂度:O(n2)
最差时间复杂度:O(n2)
空间复杂度:O(1)
稳定性:不稳定
适合场景:少量元素
代码实现:
i : 当前正在排序的索引
index : 记录 最小(最大)元素 的位置
j:用来遍历未排序序列部分

package main

import "fmt"

func main() {
	arr := []int{1, 7, 6, 7, 98, 9, -1, 7, 89, 14, -4, -5, -657}
	selectSort(arr)
	for _, v := range arr {
		fmt.Println(v)
	}
}

func selectSort(arr []int) {
	for i := 0; i < len(arr)-1; i++ {
		index := i
		for j := i + 1; j < len(arr); j++ {
			if arr[j] < arr[index] {
				index = j
			}
		}
		swap(arr, i, index)
	}
}

func swap(arr []int, i, j int) {
	tem := arr[i]
	arr[i] = arr[j]
	arr[j] = tem
}

优化选择排序:
算法思路:
1.在未排序序列中同时找到最小元素与最大元素,分别存放到未排序序列的起始位置与末尾位置
2.从剩余未排序元素中继续寻找最小元素与最大元素,然后放到未排序序列的起始位置与末尾位置
3.以此类推,直到所有元素均排序完毕
平均时间复杂度:O(n2)
数据比较次数:(n - 2) + (n - 4) + (n - 6) + …… + 1 = 1/4n2 - 1/4n
数据交换次数:(n - 1)
总复杂度:1/4n2 + 3/4n - 1
最佳时间复杂度:O(n2)
最差时间复杂度:O(n2)
空间复杂度:O(1)
稳定性:不稳定
适合场景:少量元素
代码实现:
left : 数组最左侧已排序序列的右边界索引
right: 数组最右侧已排序序列的左边界索引
minIndex : 记录 未排序序列 的 最小元素 的位置
maxIndex : 记录 未排序序列 的 最大元素 的位置
i:用来遍历未排序序列部分
注意:当最小值出现在right处,之前已经交换了arr[maxIndex]与arr[right],此时arr[maxIndex]存储着最小值,将maxIndex赋给minIndex.

package main

import "fmt"

func main() {
	arr := []int{1, 7, 6, 7, 98, 9, -1, 7, 89, 14, -4, -5, -657}
	selectSort(arr)
	for _, v := range arr {
		fmt.Println(v)
	}
}

func selectSort(arr []int) {
	left, right := 0, len(arr)-1
	for left < right {
		minIndex, maxIndex := left, right
		for i := left; i <= right; i++ {
			if arr[i] < arr[minIndex] {
				minIndex = i
			}
			if arr[i] > arr[maxIndex] {
				maxIndex = i
			}
		}
		swap(arr, maxIndex, right)
		if minIndex == right {
			minIndex = maxIndex
		}
		swap(arr, minIndex, left)
		left++
		right--
	}
}

func swap(arr []int, i, j int) {
	tem := arr[i]
	arr[i] = arr[j]
	arr[j] = tem
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 13:22:01  更:2022-03-06 13:27:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:36:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码