zoukankan      html  css  js  c++  java
  • 简单(直接)选择排序

    基本思想:

    在待排记录中依次选择关键字最小的记录作为有序序列的最后一条记录,逐渐缩小范围,直至全部记录选择完毕。

    排序过程:

    ①首先扫描整个待排列序列,通过 n-1 次比较,找到关键词值最小的结点,将它与第一个记录交换

    ②再通过 n-2 次比较,从剩余的 n-1 次记录中找出关键字次小的记录,将它与第二个记录交换

    ③重复上述操作,共进行  n-1 趟排序后,排序结束

    优点:

      一趟扫描结束后最多只有一次结点交换 

    缺点:

      每趟只能确定一个元素,表长为 n 时需要 n-1 趟

    要点:

      ①是不稳定排序

      ②当一个记录占用的空间较多时,此方法比直接插入排序快

      ③可用于链式存储结构

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 
     5 void print_arr(int arr[], int arrlen) {
     6     for (int i = 0; i < arrlen; i++) {
     7         printf("%d  ", arr[i]);
     8     }
     9     printf("
    ");
    10 }
    11 
    12 void simple_choose_sort(int arr[],int arrlen) {
    13     for (int i = 0; i < arrlen-1; i++) { //i:0~arrlen-2
    14         int min = i;
    15         for (int j = i + 1; j < arrlen; j++) { //j:i+1~arrlen-1
    16             if (arr[min] > arr[j]) { //前面比后面大,min赋给后面
    17                 min = j;
    18             }
    19         }
    20         if (min != i) { //交换arr[i]arr[i]后面序列中的最小值
    21             int temp = arr[min];
    22             arr[min] = arr[i];
    23             arr[i] = temp;
    24         }
    25         printf("第%d次排序:  ",i+1);
    26         print_arr(arr, arrlen);
    27     }
    28 }
    29 void main() {
    30     int arr[] = { 19,25,17,41,28,14,23,16 };
    31     printf("原始序列:
    ");
    32     print_arr(arr, 8);
    33     simple_choose_sort(arr, 8);
    34 }

  • 相关阅读:
    前端之多行省略号显示...
    关于跨域的那点事情
    前端之碰到数组等基础类型改变而试图无更新
    前端小记之vue下载二进制文件
    防抖和节流
    前端小记之style三元运算符
    Django之坑TemplateDoesNotExist
    MYSQL之net start mysql 1067报错
    vscode之创建django项目
    phpstorm使用mysql出现timezone问题
  • 原文地址:https://www.cnblogs.com/shanlu0000/p/13086876.html
Copyright © 2011-2022 走看看