C程序 - 选择排序攻略
什么是选择排序?
选择排序是一种简单的排序算法。它的基本思想是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放到序列的起始位置,直到全部待排序的数据元素排完为止。
选择排序的过程
选择排序的过程可以通过以下步骤来描述:
- 从序列中选择最小/最大之一的元素;
- 把它与待排序的数组中的第一个元素交换位置;
- 从剩余的元素中继续选择最小/最大元素,重复步骤2,直到排序完成。
下面是一个使用选择排序对数组进行排序的C程序示例:
#include <stdio.h>
void select_sort(int arr[], int n)
{
int i, j, min_idx;
// 循环数组
for (i = 0; i < n-1; i++)
{
// 找到未排序部分的最小值
min_idx = i;
for (j = i+1; j < n; j++)
{
if (arr[j] < arr[min_idx])
{
min_idx = j;
}
}
// 把最小值放到未排序部分的最前面
int temp = arr[min_idx];
arr[min_idx] = arr[i];
arr[i] = temp;
}
}
int main()
{
int arr[] = {64, 25, 12, 22, 11};
int n = sizeof(arr)/sizeof(arr[0]);
select_sort(arr, n);
printf("排序后的数组:\n");
for (int i=0; i < n; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
示例说明
示例一
待排序数组为 {64, 25, 12, 22, 11}
。运行 select_sort(arr, n)
函数,排序过程如下:
i=0
, 从{64, 25, 12, 22, 11}
中找到最小值为11
,将其和第1个元素64
交换,数组变为{11, 25, 12, 22, 64}
;i=1
, 从{25, 12, 22, 64}
中找到最小值为12
,将其和第2个元素25
交换,数组变为{11, 12, 22, 64, 25}
;i=2
, 从{22, 64, 25}
中找到最小值为22
,将其和第3个元素22
交换,数组变为{11, 12, 22, 64, 25}
;i=3
, 从{64, 25}
中找到最小值为25
,将其和第4个元素64
交换,数组变为{11, 12, 22, 25, 64}
;i=4
, 从{64}
中找到最小值为64
,将其和第5个元素64
交换,数组变为{11, 12, 22, 25, 64}
。
排序完成之后,数组变为 {11, 12, 22, 25, 64}
。
示例二
待排序数组为 {45, 11, 67, 2, 87, 32, 99}
。运行 select_sort(arr, n)
函数,排序过程如下:
i=0
, 从{45, 11, 67, 2, 87, 32, 99}
中找到最小值为2
,将其和第1个元素45
交换,数组变为{2, 11, 67, 45, 87, 32, 99}
;i=1
, 从{11, 67, 45, 87, 32, 99}
中找到最小值为11
,将其和第2个元素67
交换,数组变为{2, 11, 45, 87, 32, 99, 67}
;i=2
, 从{45, 87, 32, 99, 67}
中找到最小值为32
,将其和第3个元素45
交换,数组变为{2, 11, 32, 87, 45, 99, 67}
;i=3
, 从{87, 99, 67}
中找到最小值为67
,将其和第4个元素87
交换,数组变为{2, 11, 32, 67, 45, 99, 87}
;i=4
, 从{45, 99}
中找到最小值为45
,将其和第5个元素45
交换,数组变为{2, 11, 32, 67, 45, 99, 87}
;i=5
, 从{99, 87}
中找到最小值为87
,将其和第6个元素99
交换,数组变为{2, 11, 32, 67, 45, 87, 99}
。
排序完成之后,数组变为 {2, 11, 32, 45, 67, 87, 99}
。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C程序 选择排序 - Python技术站