• 二元选择排序


    1.目的

      这几天看别人的算法博客,发现有些人的代码存在错误。并且在搜索引擎上排名非常高,误导了很多人,所以自己写了这篇博客。

    ---------------------------------------  

      2018-4-2  今天有人评论才发现自己也写错了,没有认真考虑,重新改了一下,再次验证了多次.谢谢那位兄弟及时指正. 

    2.算法描述

      二元选择排序是对简单选择排序的一种改进。简单选择排序就是从数据中选择出最小的值与第一个位置的数据交换,然后在剩下的数据中选择最小的值与第二个位置的数据交换以此类推。而二元选择排序就是在每次选出数据中的最大值最小值分别和第一位和最后一位交换。所以外层循环次数就从n次变为了n/2次.

    3.代码

     1 /**
     2 * time:2017年12月28日
     3 * author:Triomphe
     4 */
     5 
     6 #include <stdio.h>
     7 #include <stdlib.h>
     8 
     9 void printArray(int a[], int n);
    10 
    11 //二元选择排序
    12 void TwoSelectSort(int a[], int n) {
    13     int i, j, mintmp, maxtmp, max, min;
    14 
    15     for (i = 0; i<n / 2; i++) {
    16         min = i, max = i;  //先将最小值与最大值下标指向未排序的第一个数。
    17         for (j = i + 1; j<n - i; j++) {
    18             if (a[j]<a[min]) {
    19                 min = j;
    20                 continue;
    21             }
    22             if (a[j]>a[max]) {
    23                 max = j;
    24             }
    25         }
    26         //最小值是否已经在正确的位置上了.
    27         if (min != i) {
    28             mintmp = a[min];
    29             a[min] = a[i];
    30             a[i] = mintmp;
    31         }
    32         //可能出现最大值存储在a[i],那么经过上一步交换,a[i]上存储的最大值已经被换到了a[min]所在位置.
    33         if (max == i) {
    34             max = min;
    35         }
    36         //最大值是否已经在正确的位置上了
    37         if (max != n - i - 1) {
    38             maxtmp = a[max];
    39             a[max] = a[n - i - 1];
    40             a[n - i - 1] = maxtmp;
    41         }
    42         
    43         printArray(a, n);
    44         printf("
    ");
    45     }
    46 }
    47 
    48 //输出数组
    49 void printArray(int a[], int n) {
    50     int i;
    51     for (i = 0; i<n; i++) {
    52         printf("%d ", a[i]);
    53     }
    54 }
    55 
    56 
    57 int main()
    58 {
    59     //定义的数组
    60     //int data[] = { 275,322,12,2,23,12,43,123,22,3,56,34,99,12,1232,3,14,45,22,22,11,44,74 };
    61     int data[20];
    62     for(int i=0;i<20;i++){
    63         data[i] =1+(int)(rand() % 50);
    64     }
    65     int n = sizeof(data) / sizeof(data[0]);    //数组中数据量
    66     TwoSelectSort(data, n);
    67     printArray(data, n);
    68     return 0;
    69 }

     4.最终结果

  • 相关阅读:
    Delphi TWebBrowser[11] 读写html代码
    Nginx 配置反向代理
    清除git中缓存的凭证(用户名及密码)
    python 摄像头
    a 链接控制打开新窗口 无地址栏
    树形多级菜单数据源嵌套结构与扁平结构互转
    使用 git 的正确姿势
    JavaScript this
    JavaScript Scope Chain
    JavaScript Scope Context
  • 原文地址:https://www.cnblogs.com/Triomphe/p/8137602.html
Copyright © 2020-2023  润新知