码迷,mamicode.com
首页 > 编程语言 > 详细

基础排序

时间:2020-02-13 15:05:38      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:思想   --   去除   实现   组元   指定元素   大于   相对   交换   

概述

排序的思想有很多种,其中最基础的三种排序即,选择排序,插入排序,冒泡排序,下面通过数组中的元素排序代码来实现三种排序思想。

选择排序

使用到双指针思想,一个游历指针(用于遍历数组中所有元素,选择出指定元素),一个标记指针(用于标记有序数组的末尾),使用到这种思想还可用于数组去重数组去除指定元素等解题手段。

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]
    }
}

冒泡排序

  1. 什么是冒泡?(冒泡就是,数组元素遍历所有元素并比较后面一个元素,若大于后面元素则交换元素,这样一次遍历交换(冒泡)就选出了最大的元素)
  2. 需要冒泡几次?(每次冒泡会选出一个相对较大元素,那么需要冒泡数组的长度个数,即让整个数组有序)
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]
        }
    }
}
  1. 优化一,每次冒泡次数可以减少
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]
        }
    }
}
  1. 优化二,记录相对有序,减少冒泡次数
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
    }
}

插入排序

遍历数组中每个元素,假定该元素前面的元素有序,尝试插入到合适的位置(往前遍历,寻找一个大于自己的元素,若不大于自己则往后挪,直到最后跳出循环时指向的下标小于自己,那么就将该元素插入到该下标后面的元素)

  1. 写法一:
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
}
  1. 写法二:
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
}

基础排序

标签:思想   --   去除   实现   组元   指定元素   大于   相对   交换   

原文地址:https://www.cnblogs.com/longui/p/12303476.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!