zoukankan      html  css  js  c++  java
  • 排序和查找1

    排序是将一组数据,依指定的顺序进行排列的过程。

    排序的分类:

    1)内部排序:

      指将需要处理的所有数据都加载到内部存储器中进行排序。

      包括(交换式排序法、选择式排序法和插入式排序法);

    2)外部排序法:

      数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。

      包括(合并排序法和直接合并排序法)

    交换式排序法:

    交换式排序属于内部排序法,是运用数据值比较后,依判断规则对数据位置进行交换,以达到排序的目的。

    交换式排序法又可分为两种:

      1)冒泡排序法 (Bubble sort )

      2)快速排序法 (Quick sort)


    交换式排序法--冒泡排序法

      冒泡排序(Bubble Sorting) 的基本思想是:通过对待排序序列从后向前(从下标较大的元素开始),比较相邻元素的排序码,若发现逆序则交换,使排序码较小的元素逐渐从后部移向前部(从下标较大的单元移向下标较小的单元),就象水底下的气泡一样逐渐向上冒。

      因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换。从而减少不必要的比较。(优化)

    下图演示了一个冒泡过程的例子:

    总结冒泡排序的规则:

      1、一共会经过 arr.length-1次的轮数比较,每一轮将会缺点一个数的位置。

      2、每一轮的比较次数再逐渐的减少。【4,3,2,1】

      3、当发现前面的一个数比后面的一个数大的时候,就进行交互。


    代码:

    1、先完成能够将最大的数,放到一个最后。
    2、把第二大的数放在倒数第二个位置
    。。。

    规律
    =》多重循环。

    用函数的方式写的冒泡排序:

    package main
    import (
      "fmt"
    )

    func BubbleSort(arr *[5]int) {
      fmt.Println("排序前arr=", (*arr))
      temp := 0 //临时变量(用于做交换)

      //冒泡排序
      for i := 0; i < len(*arr) - 1; i++ {
        for j := 0; j < len(*arr) - 1 - i; j++ {
          if (*arr)[j] > (*arr)[j + 1] { //如果>换成<就变成从大到小排序了
            temp = (*arr)[j]
            (*arr)[j] = (*arr)[j + 1]
            (*arr)[j + 1] = temp
          }
        }
      }
      fmt.Println("排序后arr=", (*arr))

    }

    func main() {

      arr := [5]int {24,69,80,57,12}
      //将数组传递给一个函数,完成排序
      BubbleSort(&arr)

      fmt.Println("main arr=", arr)
    }


    用普通的方式写的冒泡排序:

    func main() {

      arr := [5]int {24,69,80,57,12}
      fmt.Println("排序前的arr=", arr)

      temp := 0

      for i := 0; i < len(arr) -1; i++ {
        for j := 0; j < len(arr) -1 -i; j++ {
          if arr[j] > arr[j + 1] {
            temp = arr[j]
            arr[j] = arr[j + 1]
            arr[j + 1] = temp
          }
        }
      }

      fmt.Println("排序后的arr=", arr)
    }

  • 相关阅读:
    [UE4]创建对象的的几种姿势(C++)
    [UE4]IES光源概述文件
    [UE4]C++ STL总结
    [UE4]C++中引用(&)的用法和应用实例
    [UE4]单映射:TMap容器,字典表
    [UE4]集合:TSet容器
    [UE4]动态数组:TArray容器
    [UE4] 虚幻4学习---UE4中的字符串转换
    [UE4]使用PlayerController获取鼠标点击时的坐标
    [UE4]C 语言动态数组
  • 原文地址:https://www.cnblogs.com/green-frog-2019/p/11402970.html
Copyright © 2011-2022 走看看