算法
weixin_47354082
这个作者很懒,什么都没留下…
展开
-
【算法】【排序】基数排序
从低位到高位,每轮按位分组比较,将排序结果,在二维表与一维表中,来回倒换,最终实现稳定排序。前置条件1、限正整数2、申请辅助二维表0 1 2 3 4 5 6 7 8 9 最大数字,有多少位,就排序多少轮,从低位向高位,每轮排序1位,先个位排序所有数字,个位数等于几,就把数字放二维表原创 2022-04-18 12:28:21 · 161 阅读 · 0 评论 -
【算法】【排序】快速排序
快速排序,选择最左侧元素为基准,和所有元素比较,先从右往左找,比基准小则左右元素元素交换,再从左往右找,比基准大则左右元素交换,一轮排序结束,基准元素左侧均比基准元素小,基准元素右侧均比基准元素大,再递归排序基准左侧序列和基准右侧序列。空间复杂度:O(1),直接交换元素,不开辟额外空间;时间复杂度:O(),排n轮,每轮2次;//快速排序func quickSort(nums []int, low, high int) { //low,high为数组的起始下标 if low >= hi原创 2022-04-14 17:51:14 · 255 阅读 · 0 评论 -
【算法】【排序】归并排序
归并排序,分治法,有两个阶段,序列分解和合并;分解:序列元素个数为1不再分解,否则将序列不断二分,直到其长度为1合并:序列长度为1,认为其有序,再相邻有序序列两两合并成新的有序序列空间复杂度:O(n)时间复杂度:O()//归并排序func mergeSort(nums []int) { //分解 // 如果元素个数为1,则不再分解 // 否则将元素分解为两个子序列,分解后的子序列递归分解 // 将分解后的子序列合并 //合并 // 将两个子序列合并 // 将合原创 2022-04-14 04:56:22 · 183 阅读 · 0 评论 -
【算法】【排序】插入排序
第0个元素当作已排序循环n-1轮每轮取出第一个未排序元素,与已排序元素从后往前比较,如果比已排序元素小,则交换位置;进入下一轮循环 for i := 1; i < len(nums); i++ { for j := i; j > 0; j-- { if nums[j] < nums[j-1] { nums[j], nums[j-1] = nums[j-1], nums[j] //交换 } } }优化:减少交换次数;将每轮循环中,未排序原创 2022-04-13 20:47:00 · 298 阅读 · 0 评论 -
【算法】【排序】选择排序
进行n-1轮排序,每轮排序找出最小值下标,将第1个未排序元素与最小值交换;空间复杂度:O(1)时间复杂度:O()//选择排序func selectionSort(nums []int) { //重复n-1次 // 第1个未排序元素,设置为最小值,保存其下标 // 遍历剩余未排序元素,有比最小元素小的 // 替换最小值元素下标 // 交换最小值元素与第1个未排序元素 for i := 0; i < len(nums)-1; i++ { //排好序的元素放未排原创 2022-04-13 19:46:55 · 190 阅读 · 0 评论 -
【算法】【排序】冒泡排序
排序好的元素放在未排序元素末尾;每轮排序从第0号元素开始,相邻元素比较,如果左侧元素大于右侧元素,则交换相邻元素,一直比较到最后一个未排序的元素,一共进行N轮;空间复杂度:O(1)时间复杂度:O()//冒泡排序func bubbleSort(nums []int) { //for //从第1个元素到最后一个没有排序的元素 //如果左侧元素大于右侧元素 //交换 左侧元素,右侧元素 //end for for i := len(nums) - 1; i > 0; i-- {原创 2022-04-13 19:22:39 · 205 阅读 · 0 评论