zoukankan      html  css  js  c++  java
  • 选择(选择排序与堆排序)

     1 #include <iostream>
     2 //交换函数
     3 void qswap(int& p, int& q)
     4 {
     5     int temp = p;
     6     p = q;
     7     q = temp;
     8 }
     9 
    10 //选择排序
    11 void Sort(int array[], int n)
    12 {
    13     for (int i = 0; i <n-1; ++i)
    14     {
    15         int min = i;
    16         for (int j = i+1; j < n; ++j)
    17         {
    18             if (array[min] > array[j])
    19             {
    20                 min = j;
    21             }
    22         }
    23         if(min!= i)
    24         qswap(array[min], array[i]);
    25     }
    26 }
    27 
    28 int main()
    29 {
    30     int ch[] = { 2,4,6,8,3,5,7,9,0,1 };
    31     bubbleSort(ch, 10);
    32     int length = sizeof(ch) / sizeof(int);
    33     for (int i = 0; i < length; ++i)
    34     {
    35         std::cout << ch[i] << " ";
    36     }
    37     return 0;
    38 }

     堆排序思想:通过将一系列数据按照完全二叉树大顶堆或小顶堆排序,然后将堆得根结点和二叉树的最后结点交换位置。交换位置后,出去最后一个元素继续按照大顶推排序。

     1 #include <iostream>
     2 template<class T>
     3 void swap(T& a, T& b)
     4 {
     5     T temp = a;
     6     a = b;
     7     b = temp;
     8 }
     9 //堆排序
    10 void Adiust(int arr[], int s, int m)
    11 {
    12     int temp = arr[s];
    13     int j = 0;
    14     for (j = s * 2; j <= m; j *= 2)
    15     {
    16         if (j < m && arr[j] < arr[j + 1])//找出孩子的最大值下表
    17             ++j;
    18         if (temp > arr[j])//判断
    19             break;
    20         arr[s] = arr[j];
    21         s = j;
    22     }
    23     arr[s] = temp;
    24 }
    25 void HeapSort(int arr[], int n)
    26 {
    27     if (arr == nullptr || n<1)
    28         return;
    29     int s;
    30     for (s = n / 2; s > 0; --s)//二叉树的双亲结点
    31     {
    32         Adiust(arr, s, n);
    33     }
    34 
    35     for (s = n; s > 1; --s)
    36     {
    37         swap(arr[1], arr[s]);
    38         Adiust(arr, 1, s-1);
    39     }
    40 }
    41 
    42 int main()
    43 {
    44     int a[] = {0,50,40,10,60,90,70,80,30 };//在a[0]位置添加一个辅助点
    45     HeapSort(a, 8);
    46     for (int i = 0; i < sizeof(a)/sizeof(int); ++i)
    47         std::cout << a[i] << " ";
    48     return 0;
    49 }

  • 相关阅读:
    Centos7下搭建SVN
    Ubuntu设置telnet 远程登录(root权限)
    E: 无法打开锁文件 /var/lib/dpkg/lock-frontend
    使用ICMP搭建隧道(PingTunnel)
    Centos7安装Redis
    idea 激活方法
    Chrome 浏览器安装 ChroPath 插件
    jmeter引入外部jar包的方法
    maven安装
    eclipse集成 json editor plugin插件
  • 原文地址:https://www.cnblogs.com/dhhu007/p/13213552.html
Copyright © 2011-2022 走看看