精华内容
下载资源
问答
  • 选择排序是排序算法一种,这里以从小到大排序为例进行讲解。基本思想及举例说明选择排序(从小到大)基本思想是,首先,选出...下面,以对 3 2 4 1 进行选择排序说明排序过程,使用min_index 记录当前最小数所...

    选择排序是排序算法的一种,这里以从小到大排序为例进行讲解。

    基本思想及举例说明

    选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置;然后,选出第二小的数,放在第二个位置;以此类推,直到所有的数从小到大排序。

    在实现上,我们通常是先确定第i小的数所在的位置,然后,将其与第i个数进行交换。

    下面,以对 3  2  4  1 进行选择排序说明排序过程,使用min_index 记录当前最小的数所在的位置。

    第1轮 排序过程 (寻找第1小的数所在的位置)

    3  2  4  1(最初, min_index=1)

    3  2  4  1(3 > 2, 所以min_index=2)

    3  2  4  1(2 < 4, 所以 min_index=2)

    3  2  4  1(2 > 1, 所以 min_index=4, 这时候确定了第1小的数在位置4)

    1  2  4  3 (第1轮结果,将3和1交换,也就是位置1和位置4交换)

    第2轮 排序过程 (寻找第2小的数所在的位置)

    1  2  4  3(第1轮结果, min_index=2,只需要从位置2开始寻找)

    1  2  4  3(4 > 2, 所以min_index=2)

    1  2  4  3(3 > 2, 所以 min_index=2)

    1  2  4  3(第2轮结果,因为min_index位置刚好在第2个位置,无需交换)

    第3轮 排序过程 (寻找第3小的数所在的位置)

    1  2  4  3(第2轮结果, min_index=3,只需要从位置2开始寻找)

    1  2  4  3(4 > 3, 所以min_index=4)

    1  2  3  4(第3轮结果,将3和4交换,也就是位置4和位置3交换)

    至此,排序完毕。

    总结及实现

    选择排序对大小为N的无序数组R[N]进行排序,进行N-1轮选择过程。第i轮选取第i小的数,并将其放在第i个位置上。当第N-1次完成时,第N小(也就是最大)的数自然在最后的位置上。

    下面给出选择排序的C语言实现。

    #include

    #include

    #define N 8

    void select_sort(int a[],int n);

    //选择排序实现

    void select_sort(int a[],int n)//n为数组a的元素个数

    {

    //进行N-1轮选择

    for(int i=0; i

    {

    int min_index = i;

    //找出第i小的数所在的位置

    for(int j=i+1; j

    {

    if(a[j] < a[min_index])

    {

    min_index = j;

    }

    }

    //将第i小的数,放在第i个位置;如果刚好,就不用交换

    if( i != min_index)

    {

    int temp = a[i];

    a[i] = a[min_index];

    a[min_index] = temp;

    }

    }

    }

    int main()

    {

    int num[N] = {89, 38, 11, 78, 96, 44, 19, 25};

    select_sort(num, N);

    for(int i=0; i

    printf("%d ", num[i]);

    printf("\n");

    system("pause");

    return 0;

    }

    以上就是对C语言选择排序算法的详解,有需要的朋友可以参考下。

    展开全文
  • 在利用C语言进行编写程序的过程中,我们会常常通过算法及其代码来进行相关程序的编写工作。今天课课家笔者先给大家介绍C语言算法中的选择排序算法以及代码。那么到底什么是选择排序算法呢?下面由笔者慢慢道来。在...

    在利用C语言进行编写程序的过程中,我们会常常通过算法及其代码来进行相关程序的编写工作。今天课课家笔者先给大家介绍C语言算法中的选择排序算法以及代码。那么到底什么是选择排序算法呢?下面由笔者慢慢道来。

    47c7e9706157ec4fa9d1445fb1d167bc.png

    在C语言中,选择排序是排序算法的一种常用的算法,选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序等。在这里笔者用比较简单的以从小到大排序为例来给大家进行讲解。

    按照前面提到的我们先进行基本思想的概念确定,以从小到大的选择排序的基本思想为:选出最小的数,把它放在第一个位置。然后选出第二小的数,放在第二个位置,以此类推,直到所有的数从小到大排序。在实现中我们先确定第i小的数所在的位置,然后将其与第i个数进行交换。下面是以对3241进行选择排序说明排序过程,我们通过使用min_index记录当前最小的数所在的位置。

    第1轮排序过程(寻找第1小的数所在的位置)

    3241(最初,min_index=1)

    3241(3>2,所以min_index=2)

    3241(2<4,所以min_index=2)

    3241(2>1,所以min_index=4,这时候确定了第1小的数在位置4)

    1243(第1轮结果,将3和1交换,也就是位置1和位置4交换)

    第2轮排序过程(寻找第2小的数所在的位置)

    1243(第1轮结果,min_index=2,只需要从位置2开始寻找)

    1243(4>2,所以min_index=2)

    1243(3>2,所以min_index=2)

    1243(第2轮结果,因为min_index位置刚好在第2个位置,无需交换)

    第3轮排序过程(寻找第3小的数所在的位置)

    1243(第2轮结果,min_index=3,只需要从位置2开始寻找)

    1243(4>3,所以min_index=4)

    1234(第3轮结果,将3和4交换,也就是位置4和位置3交换)

    到此所有的排序工作完毕。

    ◎总结及实现

    选择排序对大小为N的无序数组R[N]进行排序,进行N-1轮选择过程。第i轮选取第i小的数,并将其放在第i个位置上。当第N-1次完成时,第N小(也就是最大)的数自然在最后的位置上。下面笔者给出选择排序的C语言实现。

    #include

    #include

    #defineN8

    voidselect_sort(inta[],intn);

    //选择排序实现

    voidselect_sort(inta[],intn)//n为数组a的元素个数

    {

    //进行N-1轮选择

    for(inti=0;i

    {

    intmin_index=i;

    //找出第i小的数所在的位置

    for(intj=i+1;j

    {

    if(a[j]

    {

    min_index=j;

    }

    }

    //将第i小的数,放在第i个位置;如果刚好,就不用交换

    if(i!=min_index)

    {

    inttemp=a[i];

    a[i]=a[min_index];

    a[min_index]=temp;

    }

    }

    }

    intmain()

    {

    intnum[N]={89,38,11,78,96,44,19,25};

    select_sort(num,N);

    for(inti=0;i

    printf("%d",num[i]);

    printf("\\n");

    system("pause");

    return0;

    }

    PS:选择排序是一种不稳定的排序算法,可能会打乱两个相同数字的原有顺序。比如序列58529,按照从小到大排序的方法,第一轮会将第1个数字5会和2交换,那么原序列中2个5的相对前后顺序就被调乱了,所以选择排序是一种不稳定的排序算法。

    本次C语言基础之选择排序算法和代码的讲解到此暂告一段落,如果以后有什么相关内容进行补充或者修改的话,笔者会在此继续进行相关内容的补充或者修改的工作,同时也欢迎大家对本次的讲解提出自己的建议和补充。最后笔者希望本次的讲解对大家学习C语言能够起到一定的帮助作用!

    展开全文
  • 个人收集整理-ZQ选择排序法选择排序法是从算法优化地角度对冒泡法地改进,其改进地思想是:经过一轮地两两...下图说明了选择排序法地操作过程:第一轮比较:第一次比较:比较[]和[],?[]第二次比较:比较[]和[],?[...

    个人收集整理-ZQ

    选择排序法

    选择排序法是从算法优化地角度对冒泡法地改进,其改进地思想是:经过一轮地两两比较后,并不马上交

    换数地位置,而是找到本轮最小地数,记下该数地位置(即在数组中地下标),待本轮比较完毕后,通过

    一次交换即可将本轮最小地数交换到位.

    示例详解

    假设数组地个元素依次为:、、、、.下图说明了选择排序法地操作过程:

    第一轮比较:

    第一次比较:比较[]和[],?[]

    第二次比较:比较[]和[],?[]>[],文档收集自网络,仅用于个人学习

    第三次比较:比较[]和[],?[]>[],文档收集自网络,仅用于个人学习

    第四次比较:比较[]和[],?[]>[],文档收集自网络,仅用于个人学习

    第一次交换前:将[]和[]进行交换

    第一次交换后:这样,最小地元素就放到了数组最前面地位置

    第二轮比较:

    第一次比较:比较[]和[],?[]>[],文档收集自网络,仅用于个人学习

    第二次比较:比较[]和[],?[]

    第三次比较:比较[]和[],?[]

    第二次交换前:将[]和[]进行交换

    第二次交换后:

    第三轮比较:

    第一次比较:比较[]和[],?[]

    第二次比较:比较[]和[],?[]

    地值没变,本轮不需要交换

    第四轮比较:

    第一次比较:比较[]和[],?[]>[],文档收集自网络,仅用于个人学习

    第三次交换前:将[]和[]进行交换

    第三次交换后:

    用选择排序法将数组[]{}中地元素从小到大排序后输出,编写地程序代码如下:文档收集自网络,仅用于

    个人学习

    <>

    ;

    ()

    {

    []{};

    (?

    {

    ;

    (?

    ([]>[])

    ;交换标号

    ()

    1?/?2

    个人收集整理-ZQ

    {

    [];交换[]和[]

    [][];

    [];

    }

    }

    (

    <

    }

    程序运行结果如下:

    2?/?2

    展开全文
  • 选择排序法 基本原理 在每一步中选取最小(大)值来重新排列,从而达到排序目的。 排序过程 1.首先通过n-1次比较,从n个数中找出最小(大),将它与第一个数交换–第一趟选择排序,结果最小(大)数被安置在...

    选择排序法

    • 基本原理
      在每一步中选取最小(大)值来重新排列,从而达到排序的目的。
    • 排序过程
      1.首先通过n-1次比较,从n个数中找出最小(大)的,将它与第一个数交换–第一趟选择排序,结果最小(大)的数被安置在第一个元素位置上;
      2.再通过n-2次比较,从剩余的n-1个数中找出最小(大)的,将它与第二个数交换–第二趟选择排序;
      3.重复上述过程,共经过n-1趟排序后,排序结束。

    具体代码如下:
    此处例子是从小到大排序。

    //选择排序(从小到大)
    #include<stdio.h>
    int main()
    {
        int a[10]= {0,8,9,4,3,6,7,5,1,2};
        int i,j,k,t; //i作为数组下标,j作为找到最大值时所对应的下标,K用来保存此次循环中最小(大)值的下标 
        for(i=0; i<10; i++)
        {
            k=i;         //假设第一个数就是最小(大)的
            for(j=i+1; j<10; j++)
                if(a[j]<a[k]) //按照从小到大的顺序排列
                    k=j; //K用来保存此次循环中最小(大)值的下标  
            if(k!=i)  //如果此次循环中的最小(大)值并非假设的最小(大)值,则交换。 
            {
                t=a[i];
                a[i]=a[k];
                a[k]=t;
            }
        }
        for(i=0; i<10; i++)
            printf("%d ",a[i]);
        return 0;
    }
    展开全文
  • 自学计算机网络时候看到一张...C语言的排序法有很多种,目前我只学到了选择法和冒泡法,这两种排序主要考察就是for循环嵌套循环和数组,里面还涉及一个交换算法,本文顺序是 交换算法,选择法排序,冒泡法排序
  • 简单选择排序是指一种排序算法,在简单选择排序过程中,所需移动记录次数比较少。最好情况下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录。 一、基本思想 在要排序一组数中,选出最小一个数与...
  • PAGE / NUMPAGES 选择排序法 选择排序法是从算法优化的角度对冒泡法的改进其改进的...示例详解 假设数组a的5个元素依次为910876下图说明了选择排序法的操作过程 第一轮比较 k=0 第一次比较 9 10 8 7 6 比较a[0]和a[1
  • 个人收集整理-ZQ 选择排序法 选择排序法是从算法优化地角度对冒泡法地改进其改进地思想是经过一...下图说明了选择排序法地操作过程 第一轮比较 第一次比较 比较[]和[]?[]<[]文档收集自网络仅用于个人学习 第二次比较 比
  • 找出最大的一个元素,和末尾的元素交换,然后再从头开始,查找第1 个到第N-1 个元素中最大的一个,和第N-1 个元素交换……其实差不多就是冒泡法的思想,但整个过程中需要移动的元素比冒泡法...//选择排序法 void Sea
  • 选择排序法是源自冒泡法但更有效率方法。   选择法循环过程与冒泡法一致,它还定义了记号k=i,然后依次把a[k]同后面元素比较,若a[k]&gt;a[j],则使k=j.最后看看k=i是否还成立,不成立则交换a[k],a,这样就比...
  • C语言实现选择排序

    2019-06-12 09:34:45
    选择排序法对一组数据由小到大进行排序,数据分别为 526、36、2、369、56、45、78、92、125、52。 实现过程: (1) 程序中用到T两个 for 循环语句。第一个 for 循环是确定位置,该位置是存放每次从待排序数列...
  • 选择排序法 原理: 选择法循环过程与冒泡法一致,它还定义了记号min=i,然后依次把a[min]同后面元素比较,若a[min]>a[j],则使k=j. 最后看看k=i是否还成立,不成立则交换a[k], a[i],这样就比冒泡法省下许多无用...
  • C语言快速排序算法

    2020-11-10 17:13:11
    快速排序法的基本精神是在数列中找出适当的轴心,然后将数列一分为二,分别对左边与右边数列进行排序,而影响快速排序法效率的正是轴心的选择。 快速排序流程: (1) 从数列中挑出一个基准值。 (2) 将所有比基准值小...
  • 选择法  在第一次排序过程中将第一个数字和最小数字进行了置换位置 而第二次排列过程中,将第二个数字和剩下数字中最小进行了置换位置 以此类推 for(i=0;i { t=a[i];  //设置当前元素为最小值 ...
  • 使用C语言来对10个数排序(选择排序)

    千次阅读 2020-06-11 08:20:27
    对数字排序可以采用选择排序法,即从后9个比较过程中,选择一个最小与第1个元素交换,下次类推,即用第2个元素与后8个进行比较,并进行交换。 #include "stdio.h" #define N 10 void SelectSort(int a[]) { //选择...
  • 目录●´∀`●记录一下练习过程错误交换冒泡排序选择法查找——顺序查找查找——折半查找 记录一下练习过程错误 交换 先看了一遍代码,然后复现,遇到以下问题: 1.do while循环,如果条件满足则继续...
  • 所谓选择法就是先将10个数中最小数与a[0]对换;再将a[1]到a[9]中最小数与a[1]对换……每比较一轮,找出一个未经排序的数中最小一个。共比较9轮。 2、分析过程 a[0] a[1] a[2] a[3] a[4] 3 6 1 9 4 ...
  • 用起泡对10个数排序由小到大 排序过程 1 比较第一个数与第二个数若 a[0]>a[1]则交换然后比较第二 个数与第三个数依次类推直至第 n-1个数和第n个数比较为止 第一趟起泡排序结果最大数被安置在最后一个元素位置上 ...
  • C语言是一门面向过程的、抽象化通用程序设计语言,广泛应用于底层开发。C语言能以简易方式编译、处理低级存储器。C语言是仅产生少量机器语言以及不需要任何运行环境支持便能运行高效率程序设计语言。尽管...
  • 排序过程中从大到小或从小到大排序方式可由循环体中if中两个数大小关系来指定,大家可以实际实践一下看看效果。 实例代码都是10个数的排序,有其他数字长度的排序需求话改一下代码里数字就行啦。 冒泡...
  • 排序和查找 排序 排序:是把一系列无序的数据按照特定的顺序重新排列为有序序列的过程 交换法排序 特点:性能比较低,但是易于理解,是选择法的基础 ...选择排序法 特点:执行次数少,不过较难理解 void DateSort
  • C语言之插入排序算法

    2016-07-28 16:22:00
    一、什么是直接插入算法?...选择排序对大小为N无序数组R[N]进行排序,进行N-1轮选择过程。首先将第1个元素作为已经排序好子数组,然后将剩余N-1个元素,逐个插入到已经排序好子数组;。因此,在第i轮排序时...
  • 以下是在C语言学习过程中对排序方法知识点总结: 1.交换法排序 将第一个数a[0]分别与后面数字a[k](n取遍1至k-1)做比较,满足条件(大于或小于),则交换该数a[k]与第一个数a[0]位置,然后继续将第一个数...
  • C语言 字符串大小排序

    千次阅读 2019-10-09 12:27:48
    使用选择排序法,大概过程如下 实现 #include <stdio.h> #include <string.h> void sort(char * name[], int n) { for (int i = 0; i < n - 2; i++) { // 第i个是需要与最小min交换 int ...
  • 排序算法--C语言实现

    2018-04-05 14:52:25
    选择法排序排序过程中共需进行n(n-1)/2次比较,互相交换n-1次。选择法排序简单、容易实现,适用于数量较小的排序。 (2)冒泡法排序 最好情况是正序,因此只要比较一次即可;最坏情况是逆序,需要比较n^2次...
  • 五种全面的排序算法,除了你熟悉冒泡选择法,你还有用过其它吗?那就下载看看吧! 五子棋是一种受大众广泛喜爱游戏,其规则简单,变化多端,非常富有趣味性和消遣性。这里设计和实现了一个人机对下...
  • C语言程序对数字排序例题

    千次阅读 2016-11-21 12:00:33
    可以利用选择法,即从后9个比较过程中,选择一个最小与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。 2.程序源代码: #define N 10 main() {int i,j,min,tem,a[N]; /*input data*/...
  • 在实际使用数组的过程中,数组...今天介绍几种简单的排序算法:选择排序,冒泡排序,交换排序,。快速算法到时另外单独分享,涉及到递归函数这块,有点小复杂 首先,第一步,先码好头文件 #include.h> #incl...
  • 二元选择法排序

    2017-02-22 17:06:14
    二元选择排序:对传统的选择排序算法改进,在一趟比较过程中,同时记录最大值和最小值位置,将最小值与第一个元素交换,最大值与最后一个元素交换,即一趟比较确定两个元素,对剩下序列重复上述过程,直至序列为空...
  • C语言编程对10个数进行排序

    千次阅读 2019-03-04 17:13:53
    问题分析:可以利用选择法,即从后9个比较过程中,选择一个最小与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。 程序源码: #include&lt;stdio.h&gt; #define N 10 void ...

空空如也

空空如也

1 2 3 4 5
收藏数 99
精华内容 39
关键字:

c语言选择排序法的过程

c语言 订阅