• 选择排序


     1 /**初始时在序列中找到最小(大)元素,放到序列的起始位置作为已排序序列;
     2 
     3 然后,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。
     4 
     5 以此类推,直到所有元素均排序完毕。**/
     6 
     7 #include <stdio.h>
     8 
     9 // 分类 -------------- 内部比较排序
    10 // 数据结构 ---------- 数组
    11 // 最差时间复杂度 ---- O(n^2)
    12 // 最优时间复杂度 ---- O(n^2)
    13 // 平均时间复杂度 ---- O(n^2)
    14 // 所需辅助空间 ------ O(1)
    15 // 稳定性 ------------ 不稳定
    16 
    17 void Swap( int A[], int i, int j)
    18 {
    19     int temp = A[i];
    20     A[i] = A[j];
    21     A[j] = temp;
    22 }
    23 
    24 void SelectionSort( int A[], int n )
    25 {
    26     int i, j, min;
    27     for( i = 0; i < n-1; i++ ) // i为已排序序列的末尾
    28     {
    29         min = i;
    30         for( j = i+1; j < n; j++)  // 未排序序列
    31         {
    32             if( A[min] > A[j])     // 找出未排序序列中的最小值
    33                 min = j;
    34         }
    35         if( i != min )
    36         {
    37             Swap( A, min , i); // 放到已排序序列的末尾,该操作很有可能把稳定性打乱,所以选择排序是不稳定的排序算法
    38         }
    39     }
    40 }
    41 
    42 int main()
    43 {
    44     int A[] = { 8, 5, 2, 6, 9, 3, 1, 4, 0, 7 }; // 从小到大选择排序
    45     int n = sizeof(A) / sizeof(int);
    46     
    47     SelectionSort(A, n); 
    48     
    49     int i;
    50     printf("选择排序结果:");
    51     for( i = 0; i < n; i++ )
    52     {
    53         printf("%d ", A[i]);
    54     }
    55     printf("\n");
    56     return 0;
    57 }
  • 相关阅读:
    css居中问题(转)
    Request.ServerVariables 各个参数的用法
    html5 画个球碰撞
    递归生成json
    AspNetPager分页结合存储过程的用法
    sql+aspnetpager+查询功能
    求1+2+……+n
    几种排序的比较 bitmapsort,qsort,set
    利用两个栈,反转其中一个栈的元素
    进程间通信(IPC, Inter Process Communication)读书笔记
  • 原文地址:https://www.cnblogs.com/itsad/p/7865825.html
Copyright © 2020-2023  润新知