当前位置:首页 > 经验

c语言三种排序方法 c语言选择排序法代码

选择排序,从字面上来说,就是要把一组数列中的元素给选择出来。

比方说给定一组数列,要求把其中的元素进行从小到大排序,那么只需要在进行每次排序的时候,都把最小的元素给选择出来,放在数列的第一位即可,第二次排序第三次排序同理,把后面数列中的最小元素给选择出来,放在已经排序好的元素的末尾,直到最后需要排序的元素没有为止。

这里有几个注意点:

1、第一次排序是遍历整个数列,把最小的元素给选择出来放在第一位。

2、第二次排序开始是遍历除了第一个元素外的后面的数列,把后面数列当中最小的元素给选择出来放到第一个元素后面一位。

3、第三次排序同理,直到最后一次排序把整个数列以从小到大的方式打印出来。

用C语言实现选择排序,这是一种最为直观的排序算法

可以发现,在进行选择排序的过程中,每次最为重要的就是选择出一个最小的元素然后进行排序。

理清逻辑,画好流程图

为了让整个流程更加清晰,我画了一张流程图,也能在以后来帮助自己理解。

用C语言实现选择排序,这是一种最为直观的排序算法

这里最容易搞混的地方,我在自己写代码理逻辑的时候也容易出现问题,那就是这个交换位置到底应该放在哪边,所以,为了讲的更清楚一些,我打算用实际例子来举例一下。

外循环是遍历数组中所有的元素,内循环是遍历除了当前元素的所有元素,然后要进行一个条件判断,也就是找出最小的元素,之后与当前元素交换位置。

那么内循环进行遍历的时候,可能会遍历到许多个比当前元素要小的元素,如果在这里进行位置交换,那岂不是就会交换好多次,与我们期望的不符,所以交换位置不能放在内循环里。

所以逻辑应该改为:在进行完内循环后,把最小元素给选择出来,然后再交换位置。

代码实现:

//选择排序
#include<stdio.h>
int main() {
    int Select[9] = {100, 3, 7, 6, 55, 29, 33, 10, -12};
    int Temp = 0;
    int index = 0;
    for(int i = 0; i < 9; i++){
        index = i;
        for(int j = i+1; j<9;j++){
            if(Select[j]<Select[index]){
                index = j;
            }
        }
        Temp = Select[i];
        Select[i] = Select[index];
        Select[index] = Temp;
        for(int i = 0; i < 9; i++){
            printf("%d ", Select[i]);
        }
        printf("n");
    }
}

大家可以看到,交换位置的逻辑与冒泡排序和直接插入排序交换位置的逻辑并无多大差别,无非这里要进行交换位置的时候必须得把最小元素给选择出来再交换位置,而不是找到一个最小元素就直接交换位置。

测试结果

用C语言实现选择排序,这是一种最为直观的排序算法

总结

总的来说,选择排序其实难度不大,但是如果刚开始学习数据结构的话,的确会有些不清楚,最重要的就是要理清逻辑,理清逻辑之后,因为内循环的主要目的是找到最小元素,如果在内循环中交换位置的话,那就没有意义了,所以要在内循环外交换位置。

总的来说,难度不大,测试结果也与我们最终期望得到的结果相同。

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:fendou3451@163.com
标签:

  • 关注微信

相关文章