如何在C中实现选择排序?

已发表: 2023-01-06

选择排序是另一种算法,它通过定位数组的最低整数然后将其分配给顶部位置来运行。 最小整数位置旁边的索引将用于开始必须扫描的以下数组。

目录

C 中的选择排序示例

如果我们取一个包含数字 [10,2,8,4,6] 的数组,其中最小的数字是 2。因此,我们将把最小的数字 2 放在第一个位置,然后数组将查找像 [2,10,8,4,6]。 接下来,我们将取下一个最小的数字,因为 2 现在已经在正确的位置上了。 下一个最小的数是 4,它会被排在第二个位置,之后类似地搜索数组,直到最后排序。

C 中的选择排序按升序对数字进行排序。 通过修改算法,数字可以按降序排列选择排序也可以在除C之外的其他语言中执行,如选择排序C++或选择排序Python。

从世界一流大学在线学习软件开发课程。 获得执行 PG 课程、高级证书课程或硕士课程,以快速推进您的职业生涯。

选择排序算法

  • 首先,我们将选择排序中的初始元素设置为最小值,并在数组中搜索最小元素,以进行选择排序算法的正确过程
  • 现在将最小元素与第二个分量进行比较。 如果第二个元素低于最小值,我们将交换它们,然后为第三个元素分配一个最小值。
  • 否则,我们将继续到第三个元素并将其与最小值进行比较。 如果第二个元素超过我们的第一个元素,我们将交换它。 重复此过程直到最后一个组件。
  • 每次迭代后,我们会看到我们的最小值已经到达未排序列表的开头。
  • 我们将从每次迭代的未排序列表的第一个条目开始索引。 直到列表被排序或所有组件都被适当定位,我们将重复步骤 1 到 4 几次。

软件工程热门课程和文章

热门节目
软件开发执行 PG 课程 - IIIT B 区块链证书课程 - PURDUE 网络安全证书计划 - 普杜 计算机科学硕士 - IIIT B
其他热门文章
2021-22 年美国云工程师薪资 AWS 解决方案架构师在美国的薪水 美国的后端开发人员薪水 美国的前端开发人员薪水
Web开发人员在美国的薪水 2022 年 Scrum Master 面试问题 如何在 2022 年开始网络安全职业? 工程专业学生在美国的职业选择

以下每次迭代的示例将有助于详细了解C 语言选择排序的过程——

迭代#1

我 [ ] = 8,5,2,6,4

设置最小值 – 8

比较 i 0和 i 1

由于 i 0 > i 1 ,设置最小值 = 5。

  • 比较 i 1和 i 2

由于 i 1 > i 2 ,设置最小值 = 2。

  • 比较 i 2和 i 3

由于 i 2 < i 3 ,设置最小值= 2。

  • 比较 i 2和 i 4

由于 i 2 < i 4 ,设置最小值 =2。

2 是所有元素中最小的数,我们必须交换 i 0和 i 2

­ 迭代#2

我 [ ]= 2,5,8,6,4

设置最小值 5

  • 比较 i 1和 i 2

由于 i 1 < i 2 ,设置最小值 = 5。

  • 比较 i 1和 i 3

i 1 < i 3 时,设置最小值 = 5

  • 比较 i 1和 i 4

同样, i 1 < i 4 ,设置最小值 = 4。

4 是数组中最小的元素,因此,我们必须交换i 1和 i 4

迭代 #3

我 [ ]= 2,4,8,6,5

设置最小值 8

  • 比较 i 2和 i 3

由于 i 2 > i 3 ,设置最小值 = 6。

  • 比较 i 3和 i 4

由于 i 3 > i 4 ,设置最小值 = 5。

5 是数组中的最小元素,您必须交换 i 2和 i 4

迭代 #4

我 [ ] = 2,4,5,6,8

设置最小值 6

  • 比较 i 3和 i 4

当 i 3 < i 4时,设置最小值 = 6。

最小值放在正确的位置; 因此,不会发生交换。

C 中的选择排序示例

// C语言中的选择排序

#include <stdio.h>

// 交换两个元素位置的函数

void swap(int *a, int *b) {

int temp = *a;

*a = *b;

*b = 温度;

}

void selectionSort(int array[], int size) {

for (int step = 0; step < size – 1; step++) {

int min_idx = 步骤;

for (int i = step + 1; i < size; i++) {

// 要按降序排序,请在此行中将 > 更改为 <。

// 在每个循环中选择最小元素。

如果(数组[i] <数组[min_idx])

min_idx = i;

}

// 将 min 放在正确的位置

交换(&array[min_idx],&array[step]);

}

}

//打印数组的函数

void printArray(int array[], int size) {

for (int i = 0; i < size; ++i) {

printf(“%d”, 数组[i]);

}

printf(“\n”);

}

// 驱动程序代码

诠释主要(){

int 数据[] = {20, 12, 10, 15, 2};

int size = sizeof(data) / sizeof(data[0]);

选择排序(数据,大小);

printf("按升序排序的数组:\n");

打印数组(数据,大小);

}

选择排序的复杂度分析

Input——给定n个输入项。

输出——对列表进行排序所需的步骤数。

逻辑——如果给我们 n 个项目,它会在第一遍进行 n-1 次比较,在第二遍进行 n-2 次比较,在第三遍进行 n-3 次比较,依此类推。 因此,可以使用以下方法计算比较总数;

输出 -

(n+1) + (n+2) + (n+3) + (n+4) + …. +1

总和 = n(n-1)/2 即 O(n²)

因为选择排序方法需要一些额外的内存空间用于临时变量的交换,所以时间复杂度为O(n2),空间复杂度为O(1)。

选择排序时间复杂度分析

Best Case:对于之前已经排序的数组,选择排序方法的best-case时间复杂度为O(n²)。

Average Case:当项目杂乱排列时,选择排序算法的平均时间复杂度为 O(n²),即既不是升序也不是降序。

最坏情况:当我们将数组的降序反转为升序时,最坏情况下的时间复杂度为 O(n²)。

在这三种情况下,选择排序方法的时间复杂度都是 O(n²)。 这是因为我们必须确定每个阶段的最低限度项目,以便正确安排它们。 跟踪整个数组后,我们将找到我们的最小元素。

结论

关于“C 中的选择排序”的博文到此结束。 您必须了解它也可以用其他语言执行,例如选择排序 C++和选择排序 Python。 我们希望本文能帮助您了解如何在 C 中对元素进行排序。

选择排序并不是成为程序员旅程中的唯一环节。 如果您希望通过专业学位显着提升您的软件开发职业生涯,upGrad 就在这里! upGrad 的前端开发(JavaScript、HTML、CSS)、后端(NoSQL-MongoDB)和微服务,然后您可以攻读 UpGrad 的计算机科学理学硕士课程。 本课程由 IIT Bangalore 和 LJMU Alumni Status 提供,可帮助您在世界各地的科技巨头中成为一名软件工程师/全栈开发人员。

本课程涵盖 Java、Spring 和 Hibernate 等工具的基本知识,加强我们的全栈开发技能,以探索具有非凡机会的就业市场。

注册以了解更多信息!

选择排序在数据结构中是什么意思?

一种简单的排序算法是选择排序。 在这个基于就地比较的排序过程中,列表被分成两半,已排序的部分位于左端,未排序的一半位于右端。 列表整体最初是未排序的那一半,已排序的部分是空的。

C 中的快速排序是什么?

称为 Quicksort 的排序算法基于分而治之策略。 通过选择枢轴元素,将数组拆分为子数组(从数组中选择的元素)。

什么是 C 中的 2 向选择?

当存在两组语句时——一组用于布尔条件为真时,另一组用于条件为假时——这称为双向选择 (if/else)。