考研要求掌握的C语言(选择排序)
选择排序的特点
每次进行一趟排序后,就确定一个数据的最终位置
选择排序的原理
就是假设你是最小(最大数据)的下标,然后和其他进行比较,若发现还有比你还小(或还大)的数据,就更新下标,直到挨个遍历后,确定最终的下标进行交换数据,就是把你和最终所确定的下标进行数据交换
核心代码实战
//选择排序
void select_sort(int nums[],int len)
{
for(int i = 0;i<len;i++)
{
int min = i;//假设最小值的下标就是当前位置的值
for(int j=i+1;j<len;j++)
{
if(nums[j]<nums[min])
{
min=j;
}
}
//交换值,这一趟下来确定该元素的最终位置
swap(nums[min],nums[i]);
}
}
完整代码可运行
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
void swap(int &a,int &b)
{
int tmp=a;
a=b;
b=tmp;
}
void rangnums(int nums[],int len)
{
srand(time(NULL));
//初始化数组
printf("初始化数组:");
for(int i=0;i<len;i++)
{
nums[i]=rand()%100+1;
printf("%d ",nums[i]);
}
puts("");
}
void print(int a[],int len)
{
for(int i=0;i<len;i++)
{
printf("%d ",a[i]);
}
puts("");
}
//选择排序
void select_sort(int nums[],int len)
{
for(int i = 0;i<len;i++)
{
int min = i;//假设最小值的下标就是当前位置的值
for(int j=i+1;j<len;j++)
{
if(nums[j]<nums[min])
{
min=j;
}
}
//交换值,这一趟下来确定该元素的最终位置
swap(nums[min],nums[i]);
printf("第%d趟结果为:",i+1);
print(nums,len);
}
}
int main()
{
int a[10]={92 ,79 ,49, 59, 86 ,38, 94, 64, 92, 3};
rangnums(a,10);
select_sort(a,10);
print(a,10);
}