专栏首页仙士可博客C语言实现选择排序

C语言实现选择排序

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

#include <stdio.h>

void swap(int *, int *);

void selection_sort(int [], int);

int main() {
    int arr[] = {3, -1, 4, 5, 8, 7, 6, 4, 2, 3};
    selection_sort(arr, sizeof(arr) / sizeof(arr[0]));
    printf("排序结果:\n");
    for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i) {
        printf("%d  ", arr[i]);
    }
    return 0;
}

void selection_sort(int arr[], int length) {
    for (int i = 0 ; i < length - 1 ; i++)//由于每次都是和后面的数字比较,所以最后一位不需要循环
    {
        int min = i;
        for (int j = i + 1; j < length; j++)  {//循环未排序好的数组,找出最小值
            if (arr[j] < arr[min]) {
                min = j;    //记录最小值
            }
        }
        swap(&arr[min], &arr[i]);    //将最小值交换到最前面,排序好
    }
}

/**
 * 交换2个数
 * @param a
 * @param b
 */
void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C语言生成固定范围的随机数

    本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn

    仙士可
  • C语言实现冒泡排序

    冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把...

    仙士可
  • c语言实现快速排序

    快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数...

    仙士可
  • 牛逼!一行代码居然能解决这么多曾经困扰我半天的算法题

    春节假期这么长,干啥最好?当然是折腾一些算法题了,下面给大家讲几道一行代码就能解决的算法题,当然,我相信这些算法题你都做过,不过就算做过,也是可以看一看滴,毕竟...

    乔戈里
  • 动画+原理+代码,解读十大经典排序算法

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见...

    昱良
  • Java 必会10大的经典算法

    原文链接:https://github.com/hustcc/JS-Sorting-Algorithm

    业余草
  • 十大经典排序算法

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见...

    用户1257393
  • 八大排序的Java实现概述1. 插入排序—直接插入排序(Straight Insertion Sort)2. 插入排序—希尔排序(Shell`s Sort)4. 选择排序—堆排序(Heap Sort)

    JavaEdge
  • 常见排序算法分析

    一.常见排序算法的实现 1.冒泡排序 冒泡排序是非常容易理解和实现,,以从小到大排序举例: 设数组长度为N。 1.比较相邻的前后二个数据,如果前面数据大于后面...

    猿人谷
  • cf559C. Gerald and Giant Chess(容斥原理)

    从$(1, 1)$到$(h, w)$不经过障碍点的方案数为$C(h + w, h)$

    attack

扫码关注云+社区

领取腾讯云代金券