排序
1、冒泡排序 最简单也是最原始的排序方法,过程 1、从第一个数开始依次与后面的数进行比较如果满足条件就交换两个数据 2、第一轮比较完毕,想要的数的最大、最小值,肯定在第一位 3、从第二个数比较,重复步骤,最后即可得到相对应的数据列表
2、快速排序
a、确认列表第一个数据为中间值,第一个值看成空缺(低指针空缺)。
b、然后在剩下的队列中,看成有左右两个指针(高低)。
c、开始高指针向左移动,如果遇到小于中间值的数据,则将这个数据赋值到低指针空缺,并且将高指针的数据看成空缺值(高指针空缺)。然后先向右移动一下低指针,并且切换低指针移动。
d、当低指针移动到大于中间值的时候,赋值到高指针空缺的地方。然后先高指针向左移动,并且切换高指针移动。重复c、d操作。
e、直到高指针和低指针相等时退出,并且将中间值赋值给对应指针位置。
f、然后将中间值的左右两边看成行的列表,进行快速排序操作。
3、插入排序 核心思想是向已有排序的数组插入当前值 现有数组[2,3,1,5,8,7,9,4,6],首先去有序数组[2],所以顺序不需要变化, 下一个数为3,3>2,顺序无需变化,下个数为1,这时需要变化,在[2,3]插入1, 变为[1,2,3] 依次插入数据,排序方法如下所示
a、默认从第二个数据开始比较。
b、如果第二个数据比第一个小,则交换。然后在用第三个数据比较,如果比前面小,则插入(狡猾)。否则,退出循环
c、说明:默认将第一数据看成有序列表,后面无序的列表循环每一个数据,如果比前面的数据小则插入(交换)。否则退出
算法代码实现:kotlin
object Sort {
//冒泡算法 O(n*(n-1))
fun bubblingSort(array:IntArray){
for (i in array.indices){
for (j in i+1 until array.size){
if(array[i]>array[j]){
var start = array[i]
array[i] = array[j]
array[j] = start
}
}
}
}
//插入排序O(n)到O(n*n)
fun insertSort(array:IntArray){
var preIndex = 0
var current = 0
for (i in array.indices){
if(i>0){
preIndex = i-1
current = array[i]
while (preIndex>=0&&array[preIndex]>current){
array[preIndex+1] = array[preIndex]
preIndex--
}
array[preIndex + 1] = current;
}
}
}
//快速排序
fun quickSort(array: IntArray,low:Int,high:Int) {
var t: Int
if (low > high) {
return
}
var i: Int = low
var j: Int = high
//temp就是基准位
val temp: Int = array[low]
while (i < j) {
//先看右边,依次往左递减
while (temp <= array[j] && i < j) {
j--
}
//再看左边,依次往右递增
while (temp >= array[i] && i < j) {
i++
}
//如果满足条件则交换
if (i < j) {
t = array[j]
array[j] = array[i]
array[i] = t
}
}
//最后将基准为与i和j相等位置的数字交换
//最后将基准为与i和j相等位置的数字交换
array[low] = array[i]
array[i] = temp
//递归调用左半数组
//递归调用左半数组
quickSort(array, low, j - 1)
//递归调用右半数组
//递归调用右半数组
quickSort(array, j + 1, high)
}
//希尔排序
//归并排序
//堆排序
//计数排序
//桶排序
//基数排序
}