zoukankan      html  css  js  c++  java
  • 排序算法c语言描述---选择排序

    排序算法系列学习,主要描述冒泡排序,选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序等排序进行分析。

    文章规划:

    一。通过自己对排序算法本身的理解,对每个方法写个小测试程序。 具体思路分析不展开描述。

    二。通过《大话数据结构》一书的截图,详细分析该算法 。 

    在此,推荐下程杰老师的《大话数据结构》一书,当然不是打广告,只是以一名读者的身份来客观的看待这本书,确实是通俗易懂,值得一看。

    ②选择排序

     

    一。个人理解

    选择排序思路:

    首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列的起始位置。以此类推,直到所有元素均排序完毕。

    具体做法是:

    选择最小的元素与未排序部分的首部交换,使得序列的前面为有序。 

    通俗的说,就是每次循环找到未排序序列中的最小元素放到起始位置。直至循环n-1次遍历全部的。

    选择排序也比较简单易懂,下面直接上代码。

    #include<stdio.h>
    // 打印结果
    void Show(int  arr[] , int n)
    {
        int i;
        for ( i=0; i<n; i++ )
            printf("%d  ", arr[i]);
        printf("
    ");
    }
    // 交换数组元素位置
    void Swap( int *num_a, int *num_b )
    {
        int temp = *num_b;
        *num_b = *num_a;
        *num_a = temp;
    }
    // 选择排序
    void SelectSort( int *arr, int n )
    {
        int i, j, min_;   //min_ 为最小值下标
        for ( i=0; i<n-1; i++ )  //控制n-1趟的选择步骤
        {
            min_ = i;              //将当前下标定义为最小值下标
            for ( j=i+1; j<n; j++ )    //在arr[i],arr[i+1],...,arr[n-1]中选键值最小的结点
            {
                if ( arr[min_] > arr[j] )
                    min_ = j;     //如果有小于当前最小值的,把下标赋值给min_
            }
            if ( i != min_ )
                Swap( &arr[i], &arr[min_]);   //如果min_不等于初始值,说明找到最小值,交换。
        }
    }
    
    int main()
    {   //测试数据
        int arr_test[10] = { 8, 4, 2, 3, 5, 1, 6, 9, 0, 7 };
        //排序前数组序列
        Show( arr_test, 10 );
        SelectSort( arr_test, 10 );
        //排序后数组序列
        Show( arr_test, 10 );
        return 0;
    }
    

     


    二。 《大话数据结构》一书截图分析

    注:本文仅为分享知识,绝无商业用途。

    如果以该种形式分享知识造成不必要的纠纷,还请第一时间告知。

  • 相关阅读:
    Vue_使用v-model指令写的简易计算器
    Vue_v-for的四种用法示例
    bs4_加载顺序
    Vue_自定义指令
    Vue_v-for中key的使用注意事项
    Vue_指令
    bs4_card(卡片)
    Vue_过滤器
    Vue_生命周期函数
    selenium 文件上传
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3241145.html
Copyright © 2011-2022 走看看