zoukankan      html  css  js  c++  java
  • 八大排序算法

    1,冒泡排序

     1 void BubbleSort(int *array,int length) {
     2     bool flag;//标志位 
     3     for(int i = length - 2;i >= 0;--i) {
     4         flag = true;
     5         for(int j = 0;j <= i;++j) {
     6             if(array[j] > array[j+1]) {
     7                 flag = false;//此趟发生了交换 
     8                 swap(&array[j],&array[j+1]);
     9             }
    10         }
    11         if(flag == true)//某一趟没发生交换,说明已经排序好 
    12         break;
    13     }
    14 }
    View Code

     算法说明:

    1,每次挑出最大的元素放到数组最后的位置。

    2,一次性把元素放到最终位置。

    3,某一趟没发生交换,说明数组已经完全有序,提前结束排序。

    时间复杂度:

    最坏(n^2):极其无序

    最好(n):数组已经有序,扫描一遍数组而已。

    平均(n^2)

    稳定性:稳定

    适用:大致有序的小数据量。

    2,选择排序

     1 void SelectSort(int *array,int length) {
     2     int minIndex;//保存最小元素的下标 
     3     for(int i = 0;i < length;++i) {
     4         minIndex = i;//当前一趟的第一个元素的下标 
     5         for(int j = i;j < length;++j) {
     6             if(array[j] < array[minIndex])
     7             minIndex = j;//更新minIndex 
     8         }
     9         swap(&array[minIndex],&array[i]);
    10     }
    11 }
    View Code

    1,每趟挑出一个最小的放到最终位置

    2,无论数组原始情况,都要彻底扫描数组

    3,稳定性:稳定的

    4,相比冒泡排序的优点是,保存索引但不交换,开销小。缺点是冒泡排序可以提前结束。

    5,时间复杂度:最好,最坏,平均都是n^2

    6,最适:数组初始顺序无所谓。小数据量。

    3,直接插入排序

     1 void InsertSort(int *array,int length) {
     2     int temp;//暂存待排序的元素 
     3     int j;
     4     for(int i = 1;i < length;++i) {
     5         temp = array[i];
     6         for(j = i - 1;j >= 0 && array[j] > temp;--j)
     7             array[j+1] = array[j];
     8         array[j+1] = temp;
     9     }
    10 }
    View Code

    1,从第二个元素起,与它前面的所有元素比较,找到它应该插入的位置,插入之。

    2,非一次性放入最终位置

    3,时间复杂度:最好n 最差和平均n^2

    4,最适:越有序越好,小数据量。

    5,稳定的

    4,快速排序

    5,归并排序

  • 相关阅读:
    环境变量配置1
    Golang 类型转换,断言和显式强制转换
    Goland could not launch process: decoding dwarf section info at offset 0x0: too short 解决方案
    用puttygen工具把私钥id_rsa转换成公钥id_rsa.ppk
    JetBrains GoLand 2018 激活码/ 注册码(最新破解方法)
    Go学习笔记(只有链接)
    linux中的ftp命令
    Linux的学习之路
    like语句百分号前置会使用到索引吗?
    记录下每月生活开支
  • 原文地址:https://www.cnblogs.com/afreeman/p/8660352.html
Copyright © 2011-2022 走看看