如何在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)。