zoukankan      html  css  js  c++  java
  • 选择排序法

    在没看课本之前,尝试着按照自己的理解写出我所任务的快速排序法。结果基本跟书上的一样。就是平白的多了好多次交换。

     1 #include <stdio.h>
     2 
     3 void SelectSort(int r[], int n)
     4 {
     5     int i, j, k, temp;
     6     for(i = 0; i < n - 1; i++)
     7     {
     8         k = i;
     9         for(j = i+1; j < n; j++)
    10         {
    11             if(r[j] < r[k])
    12                 k = j;
    13         }
    14         if(i != k) // 避免当a[i] 与 a[k]相等时多一次交换
    15         {
    16             temp = r[i];
    17             r[i] = r[k];
    18             r[k] = temp;
    19         }
    20     }
    21 }
    22 
    23 void print(int r[], int n)
    24 {
    25     int i;
    26     for(i = 0; i < n; i++)
    27         printf("%d ", r[i]);
    28     puts("
    ");
    29 }
    30 
    31 int main()
    32 {
    33     int a[10] = {3, 1, 5, 2, 7, 8, 9, 4, 6, 0};
    34     printf("before sort:
    ");
    35     print(a, 10);
    36     SelectSort(a, 10);
    37     printf("sort after:
    ");
    38     print(a, 10);
    39     return 0;
    40 }

    选择排序就是每趟选择一个最小的数,然后跟前面的数交换。而我自己做的是只要发现比第一个数小的就交换,浪费了些资源。

    选择排序的时间复杂度O(n^2)

  • 相关阅读:
    实心菱形
    进制转换
    简单题目
    一元二次方程求解
    反转整数
    最大公约数
    数老鼠
    “鱼额宝”
    数组第K小数
    最大子数组和
  • 原文地址:https://www.cnblogs.com/hello-lijj/p/7247410.html
Copyright © 2011-2022 走看看