选择排序:将给定数组元素按照从小到大排序
选择排序函数:
void selection_sort(int *array,int length)
{
for(int i = 0;i < length - 1;i++)
{
int MinIndex = i; //假定每趟开始的位置为最小值的下标
int min = array[i]; //假定每趟开始位置为最小值
for(int j = i + 1;j < length;j++)
{
if(min > array[j])
{
min = array[j]; //更新最小值
MinIndex = j; //存储最小值位置的下标
}
}
if(MinIndex != i) //如果最小值的索引和每趟的开始下标相同则说明开始位置就是最小值,不用交换数据
{
array[MinIndex] = array[i]; //将最小值和每趟开始位置的数据交换
array[i] = min; //将最小值放置在每趟开始位置下标处
}
}
}
完整程序:
#include <stdio.h>
#include <windows.h>
void selection_sort(int *array,int length);
void show(int *array,int length);
void main()
{
//给定数组元素
int array[] = {9,7,18,4,10};
//计算数组长度
int length = sizeof(array) / sizeof(array[0]);
//排序
selection_sort(array,length);
//显示排序后数组内容
show(array,length);
system("pause");
return ;
}
void selection_sort(int *array,int length)
{
for(int i = 0;i < length - 1;i++)
{
int MinIndex = i; //假定每趟开始的位置为最小值的下标
int min = array[i]; //假定每趟开始位置为最小值
for(int j = i + 1;j < length;j++)
{
if(min > array[j])
{
min = array[j]; //更新最小值
MinIndex = j; //存储最小值位置的下标
}
}
if(MinIndex != i) //如果最小值的索引和每趟的开始下标相同则说明开始位置就是最小值,不用交换数据
{
array[MinIndex] = array[i]; //将最小值和每趟开始位置的数据交换
array[i] = min; //将最小值放置在每趟开始位置下标处
}
}
}
//输出数组内容
void show(int *array,int length)
{
printf("排序后的数组为:\n");
for(int i = 0;i < length;i++)
{
printf("%d\t",array[i]);
}
printf("\n");
}
测试结果:
结果分析:
说明:此文章为学习笔记,如有侵权请联系删除。