选择排序是一种简单直观的排序算法,其基本思想是:每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完,选择排序是不稳定的排序方法,下面是一个简单的C语言实现选择排序的程序。
我们需要了解选择排序的基本步骤:
1、遍历整个数组,找到最小值及其索引。
2、将找到的最小值与当前遍历到的元素交换。
3、重复上述步骤,直到整个数组有序。
下面是C语言实现选择排序的代码:
#include <stdio.h> void selection_sort(int arr[], int n) { for (int i = 0; i < n 1; i++) { int min_index = i; for (int j = i + 1; j < n; j++) { if (arr[j] < arr[min_index]) { min_index = j; } } if (min_index != i) { int temp = arr[i]; arr[i] = arr[min_index]; arr[min_index] = temp; } } } int main() { int arr[] = {64, 34, 25, 12, 22, 11, 90}; int n = sizeof(arr) / sizeof(arr[0]); selection_sort(arr, n); printf("Sorted array is: "); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf(" "); return 0; }
程序解析:
1、#include <stdio.h>
:引入标准输入输出库,用于输入输出操作。
2、void selection_sort(int arr[], int n)
:定义一个名为selection_sort的函数,接收一个整型数组和数组长度作为参数,注意,这里传入的是数组首元素的地址,而不是数组本身,函数内部对数组进行的修改会影响到原数组。
3、for (int i = 0; i < n 1; i++)
:外层循环,遍历整个数组,由于数组已经有序,所以只需要遍历n1次,这里的n是数组的长度。
4、int min_index = i;
:初始化最小值的索引为当前遍历到的元素的索引。
5、for (int j = i + 1; j < n; j++)
:内层循环,从当前遍历到的元素的下一个元素开始遍历,直到数组末尾,这里的目的是找到剩余未排序元素中的最小值。
6、if (arr[j] < arr[min_index])
:如果找到一个更小的元素,更新最小值的索引。
7、if (min_index != i)
:如果最小值的索引发生了变化,说明找到了一个新的最小值,此时需要将最小值与当前遍历到的元素交换。
8、int temp = arr[i]; arr[i] = arr[min_index]; arr[min_index] = temp;
:交换两个元素的值,使用一个临时变量temp存储其中一个元素的值,然后分别给两个元素赋值,从而实现交换。
9、main()
:程序的入口函数,在这里定义了一个待排序的数组,并调用selection_sort函数对其进行排序,输出排序后的数组。
通过以上代码,我们可以实现一个简单的C语言选择排序程序,在实际开发中,我们还可以对选择排序进行优化,例如使用二分查找法代替线性查找法来提高查找最小值的效率。
原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/381435.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复