• 001 C/C++ 选择排序法


    简单选择排序:

    选择排序法 是对 定位比较交换法(也就是冒泡排序法) 的一种改进。

    选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。

    简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。

    以下为简单选择排序的存储状态,其中大括号内为无序区,大括号外为有序序列:
    初始序列:{49 27 65 97 76 12 38}
      第1趟:12与49交换:12{27 65 97 76 49 38}
      第2趟:27不动 :12 27{65 97 76 49 38}
      第3趟:65与38交换:12 27 38{97 76 49 65}
      第4趟:97与49交换:12 27 38 49{76 97 65}
      第5趟:76与65交换:12 27 38 49 65{97 76}
      第6趟:97与76交换:12 27 38 49 65 76 97 完成

    C  code:

     1 void SelectSort( int a[], int length )
     2 {
     3     //对数组a排序,length是数组元素数量
     4     for( int i = 0; i < length; i++ ) {
     5         // 找到从i开始到最后一个元素中最小的元素,k存储最小元素的下标.
     6         int k = i;
     7         for( int j = i + 1; j < length; j++ ) {
     8             if( a[j] < a[k] ) { k = j; }
     9         }
    10 
    11         // 将最小的元素a[k] 和 开始的元素a[i] 交换数据.
    12         if( k != i ) {
    13             int temp;
    14             temp= a[k];
    15             a[k] = a[i];
    16             a[i] = temp;
    17         }
    18     }
    19 }

     选择排序演示程序:

     1 #include "stdio.h"
     2 #include "stdlib.h"
     3 
     4 void printArray( int* a, int length )
     5 {
     6     for( int i = 0; i < length; i++ )
     7     {
     8         printf( "%d ", a[i] );
     9     }
    10     printf( "
    " );
    11 }
    12 
    13 void SelectSort( int a[], int length )
    14 {
    15     //对数组a排序,length是数组元素数量
    16     for( int i = 0; i < length; i++ ) {
    17         // 找到从i开始到最后一个元素中最小的元素,k存储最小元素的下标.
    18         int k = i;
    19         for( int j = i + 1; j < length; j++ ) {
    20             if( a[j] < a[k] ) { k = j; }
    21         }
    22 
    23         // 将最小的元素a[k] 和 开始的元素a[i] 交换数据.
    24         if( k != i ) {
    25             int temp;
    26             temp= a[k];
    27             a[k] = a[i];
    28             a[i] = temp;
    29         }
    30     }
    31 }
    32 
    33 void main()
    34 {
    35     int a[]={ 1,56,8,66,2,57,49,26,68,99,100 };
    36     int length=sizeof( a ) / sizeof( a[0] );
    37     printf( "排序前:" );
    38     printArray( a, length );
    39     SelectSort( a, length );
    40     printf( "排序后:" );
    41     printArray( a, length );
    42     system( "pause" );
    43 }

     Output Result:

    排序前:1 56 8 66 2 57 49 26 68 99 100
    排序后:1 2 8 26 49 56 57 66 68 99 100
    请按任意键继续. . .
    致读者:本人自学编程,知识薄弱,实践经验不够,博客文章难免有错误之处,希望读者能积极指正,感激不尽。 若您有更精妙的解决方案或者对文中有疑问,欢迎留言或联系我讨论问题。
  • 相关阅读:
    javascript typeof 和 instanceof 的区别和联系
    || and && 理解
    jquery选择器总结
    overflow-y:auto 回到顶部
    HTML 获取屏幕,浏览器,页面的高度
    height()、innerHeight()、outerHeight()函数的区别详解
    git入门篇-----本地操作
    sublime快捷键
    Atom 和 VSCode 同一天发布神器:实时编码分享
    编辑器插件和配置备份神器--sync setting
  • 原文地址:https://www.cnblogs.com/it89/p/11068215.html
Copyright © 2020-2023  润新知