zoukankan      html  css  js  c++  java
  • 排序算法--简单选择排序

    # 选择排序
    ##本小节知识点:
    1. 【了解】选择排序
    2. 【掌握】选择排序的基本思想
    3. 【了解】练习

    ---

    ##1.选择排序
    - 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元 素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。

    ---

    ##2.选择排序的基本思想
    - 第一趟排序在所有待排序的n个记录中选出关键字最小的记录,将它与数据表中的第一个记录交换位置,使关键字最小的记录处于数据表的最前端;第二趟在剩下的n-1个记录中再选出关键字最 小的记录,将其与数据表中的第二个记录交换位置,使关键字次小的记录处于数据表的第二个位置;重复这样的操作,依次选出数据表中关键字第三小、第四小...的元素,将它们分别换到数据表的第三、第四...个位置上。排序共进行n-1趟,最终可实现数据表的升序排列。

    - 示例





    ---

    ##3.练习
    - 输入一组无序数据,使用选择排序法进行排序,并输出。
    ---

     1 //  main.c
     2 //  选择排序
     3 
     4 #include <stdio.h>
     5 //交换算法
     6 //打印输出数组的功能
     7 void printArray(int array[],int length)
     8 {
     9     for (int i=0; i<length; i++) {
    10         printf("%d ",array[i]);
    11     }
    12     printf("
    ");
    13 }
    14 
    15 //为了能够交换功能模块化,需要使用传地址来改变函数外的值
    16 //要注意的是,参数需要传入地址值,也就是通过&获取变量的地址
    17 void swop(int *a,int *b)
    18 {
    19     int temp = *a;
    20     *a = *b;
    21     *b = temp;
    22 }
    23 
    24 void selectSort(int r[],int n)
    25 {
    26     printf("
    ");
    27     int min;
    28     for (int i=0; i<n-1; i++) {
    29         min = i;
    30 //        printf("当i = %d的时候开始比较。",i);
    31         for (int j=i+1; j<n; j++) {
    32 //            printf("比较前:最小的:%d和待比较的%d
    ",r[min],r[j]);
    33 //            printArray(r,4);
    34             if (r[j] < r[min]) {
    35 //                printf("要替换了,");
    36                 min = j;//内循环一遍历到小值,就将该索引值赋值给min
    37             }//紧接着就继续查找最小值,然后获得其索引
    38         }
    39         //找到最小值后,判断索引和之前的索引是否相同,不同就替换
    40         if (min != i) {
    41             swop(&r[min], &r[i]);
    42         }
    43     }
    44 }
    45 
    46 int main(int argc, const char * argv[]) {
    47     
    48     int a[5] = {23,45,12,13,18};
    49     selectSort(a,5);
    50     printArray(a,5);
    51     return 0;
    52 }


    选择排序的思路很简单,分两步:1、查找最小的。2、第几次查找就和第几个替换。第一次查找就和第一个数替换

    1、查找思路:标记法(通过min变量存储索引值),开始标记第一个数,然后跟第二个开始比较,哪个小就取其索引值标记,标记好后,

         接着跟下一个数比较,哪个小就取其索引值标记,循环复始。直到比较到最后一个数。<这里就是第n次内循环>


    2、<完成第n次内循环之后>就把min索引指向的数组值和数组第n个值替换。

    (补充)

    3、循环初始条件和结束条件怎么取?

        每次内循环最开始都是是第i个和第i+1个比较,所以外循环初始条件i=1,内循环初始条件j=i+1,

        因为最后是第n-1个和第n个比较,所以结束条件外循环i<n-1,内循环j<n。

     
     
     
     
     
     
     
  • 相关阅读:
    C#操作符??和?:
    使用Windows8开发Metro风格应用一
    使用Windows8开发Metro风格应用二
    Win8使用技巧
    详解 xls xlst xml 一
    SqlDataAdapter DataSet DataTable 详解
    DataSet 与 xml
    FileTracker : error FTK1011编译错误
    我的CHROME插件
    Komodo升级错误
  • 原文地址:https://www.cnblogs.com/goodboy-heyang/p/4892914.html
Copyright © 2011-2022 走看看