• 排序算法---交换算法


    1.先定义一些基础函数

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 void _swap(int& a, int& b)
     6 {
     7     int tmp = b;
     8     b = a;
     9     a = tmp;
    10 }
    11 
    12 int main()
    13 {
    14     int a[] = {1, 5, 3, 6, 9, 4, 2, 8, 7};
    15     int n = sizeof(a)/sizeof(a[0]);
    16     
    17     bubbleSort(a, n);  //具体算法见后面章节
    18     quickSort(a, n);
    19     insetSort(a, n);
    20     shellSort(a, n);
    21     selectSort(a, n);
    22     heapSort(a, n);
    23     mergeSort(a, n);
    24     
    25     for(int i = 0; i < n; i++)
    26     {
    27         cout << a[i] << "    ";
    28     }
    29     cout << endl;
    30     
    31     
    32     while(1);
    33     
    34     return 0;
    35 }

    2.冒泡排序

     1 void bubbleSort(int *arr, int n)
     2 {
     3     for(int i = 0; i < n; i++)
     4     {
     5         for(int j = 0; j< n - i - 1; j++)
     6         {
     7             if(arr[j] > arr[j+1])
     8             {
     9                 _swap(arr[j], arr[j+1]);
    10             }
    11         }
    12     }
    13 }

    3.快速排序

     1 int _part(int *arr, int start, int end)
     2 {
     3     int mid = start;
     4     while(start < end)
     5     {
     6         while(start < end && arr[end] >= arr[mid])  //此处 arr[end] >= arr[mid] 或是 arr[end] > arr[mid] 效果相同,无影响
     7         {
     8             --end;
     9         }
    10     
    11         while(start < end && arr[start] <= arr[mid]) //此处 arr[start] <= arr[mid] 或是 arr[start] < arr[mid] 效果相同,无影响
    12         {
    13             ++start;
    14         }
    15 
    16         if(start < end)
    17         {
    18             _swap(arr[start], arr[end]);
    19         }
    20     }
    21     
    22     _swap(arr[start], arr[mid]);
    23     
    24     return start;
    25 }
    26 
    27 void _quickSort(int *arr, int start, int end)
    28 {
    29     if(start >= end)
    30     {
    31         return;
    32     }
    33     
    34     int mid = _part(arr, start, end);
    35     _quickSort(arr, start, mid - 1);
    36     _quickSort(arr, mid + 1, end);
    37 }
    38 
    39 void quickSort(int *arr, int n)
    40 {
    41     _quickSort(arr, 0, n-1);
    42 }

      快速排序算法是使用最广泛的一种的算法,标准STL库中的sort算法就使用了快速排序算法,但是,不是单纯的使用了快速排序这一种算法,而是多种算法混合使用的一种算法,以快速排序算法为主,后续章节会在慢慢介绍。

  • 相关阅读:
    数论学习笔记之欧拉函数
    [CQOI2014]危桥
    lspci -nnk
    linux 详解useradd 命令基本用法
    。 (有些情况下通过 lsof(8) 或 fuser(1) 可以 找到有关使用该设备的进程的有用信息)
    CentOS 7 设置默认进入字符界面
    下面附上top和sar的使用方法,方便参考! "top"工具
    Centos7/RHEL7 开启kdump
    Linux内存带宽的一些测试笔记
    调试测试
  • 原文地址:https://www.cnblogs.com/chusiyong/p/11319730.html
Copyright © 2020-2023  润新知