选择排序的主要动作就是“选择”,排序原理其实就是从未排序的数列找到最小的元素,放在已排序数列的开始位置,然后再从未排序的数列找到最小的元素,然后再放置已排序数列的末尾
/******************************************************************************
*
* file name : 选择排序
* author : Wzy
* data : 2025/12/15
* function : 给定一个数组,数组里面存有10个随机整数,然后利用选择排序实现整数序列的升序排列,使用数组实现
* note : None
*
* copyRight (c) 2025 17630246607@163.com All Right Reseverd
* ****************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
/******************************************************************************
*
* func name : SelectionSort
* function : 实现选择排序
* argument :
* @arr[10]:待排序的整形数组
* @arrsize:数组中元素的个数
* retval : None
* author : Wzy
* date : 2025/12/15
* note : 选择排序的主要动作就是“选择”,从序列中找到一个最小值元素,把最小值元素放在整个序列的首部,重复n轮,直到整个序列有序
*
* ****************************************************************************/
#if 1
void SelectionSort(int arr[],int arrsize)
{
int min = 0; //记录最小值元素的下标
int temp = 0; //记录最小值元素的值
//1.需要比较n轮,每轮找到序列的最小元素
for (int n = 0; n < arrsize - 1; ++n) //从第0轮开始,需要比较arrsize-1轮
{
min = n;//假设每轮未排序序列的第一个元素是最小值元素
//找到序列中的最小元素的下标
for (int m = n+1; m < arrsize; ++m)
{
//每轮需要通过比较的方式才可以确定最小值
if (arr[min] > arr[m])
{
min = m; //更新当前的最小值元素的下标
}
}
//找到最小值元素,需要把最小值元素和未排序序列的首元素进行交换
temp = arr[min];
arr[min] = arr[n];
arr[n] = temp;
}
}
#endif
int main(int argc, char const *argv[])
{
//定义一个整形数组存储10个整数
int arr[] = {14,23,12,5,8,3,9,10,33,6,11};
printf("排序前整数序列\n");
for (int i = 0; i <sizeof(arr)/sizeof(arr[0]); ++i)
{
printf("%d ",arr[i]);
}
printf("\n");
SelectionSort(arr,sizeof(arr)/sizeof(arr[0]));
printf("排序后整数序列\n");
for (int i = 0; i <sizeof(arr)/sizeof(arr[0]); ++i)
{
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}
测试结果
