基础排序
Posted longui
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础排序相关的知识,希望对你有一定的参考价值。
概述
排序的思想有很多种,其中最基础的三种排序即,选择排序,插入排序,冒泡排序,下面通过数组中的元素排序代码来实现三种排序思想。
选择排序
使用到双指针思想,一个游历指针(用于遍历数组中所有元素,选择
出指定元素),一个标记指针(用于标记有序数组的末尾),使用到这种思想还可用于数组去重
,数组去除指定元素
等解题手段。
for i:=0;i<len(arr)-1;i++{
min := i
for j:=i+1;j<len(arr);j++{
if arr[i]>arr[j] {
min = j
}
}
if i!=min {
arr[i],arr[min] = arr[min],arr[i]
}
}
冒泡排序
- 什么是冒泡?(冒泡就是,数组元素遍历所有元素并比较后面一个元素,若大于后面元素则交换元素,这样一次遍历交换(冒泡)就选出了最大的元素)
- 需要冒泡几次?(每次冒泡会选出一个相对较大元素,那么需要冒泡数组的
长度个数
,即让整个数组有序)
for i:=0;i<len(arr);i++{
for j:=0;j<len(arr)-1;j++{
if arr[j]>arr[j+1] {
arr[j],arr[j+1] = arr[j+1],arr[j]
}
}
}
- 优化一,每次冒泡次数可以减少
for i:=0;i<len(arr)-1;i++{ //只剩一个,不需要冒泡
for j:=0;j<len(arr)-1-i;j++{ //已冒泡元素相对有序,无需冒泡
if arr[j]>arr[j+1] {
arr[j],arr[j+1] = arr[j+1],arr[j]
}
}
}
- 优化二,记录相对有序,减少冒泡次数
for i:=0;i<len(arr)-1;i++{ //只剩一个,不需要冒泡
isneedexchange := false
for j:=0;j<len(arr)-1-i;j++{ //已冒泡元素相对有序,无需冒泡
if arr[j]>arr[j+1] {
arr[j],arr[j+1] = arr[j+1],arr[j]
isneedexchange = true
}
}
if !isneedexchange {
break
}
}
插入排序
遍历数组中每个元素,假定该元素前面的元素有序,尝试插入到合适的位置(往前遍历,寻找一个大于自己的元素,若不大于自己则往后挪,直到最后跳出循环时指向的下标小于自己,那么就将该元素插入到该下标后面的元素)
- 写法一:
for i:=1;i<len(arr);i++{
tmp := arr[i]
for j:=i;j>0&&arr[j-1]>tmp;j--{
arr[j] = arr[j-1]
}
arr[j] = tmp
}
- 写法二:
for i:=1;i<len(arr);i++{
tmp := arr[i]
for j:=i-1;j>=0&&arr[j]>tmp;j--{
arr[j+1] = arr[j]
}
arr[j+1] = tmp
}
以上是关于基础排序的主要内容,如果未能解决你的问题,请参考以下文章
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段
[vscode]--HTML代码片段(基础版,reactvuejquery)