【排序】经典排序算法动画详解----选择排序C语言实现

选择排序
基本思想:
1.第一次从全部数据元素扫描中选出最小(或最大)的一个元素,存放在序列的起始位置(第一个位置),
2.再从第二个的元素开始向后扫描寻找到最小(大)元素,然后放到已排序的序列的第二个位置。 以此类推,直到全部待排序的数据元素的个数为零。

图解:
在这里插入图片描述
操作方法:
1.假设第一个位置的元素是最小的设为min,for循环向后扫描一旦发现比min小的元素则把min的值换成比它小的元素值,并记下最小元素的值与坐标。
2.一趟循环结束,交换第一个位置元素的值和序列中最小值元素所在位置的值。

#include<stdio.h>
void swap(int *p1,int *p2)
{
    int t;
    t=*p1;
    *p1=*p2;
    *p2=t;
}
void selection_sort(int data[],int n)
{
    int i,j;
    int minpos;
    int min;
    for(i=0;i<n;i++)
    {
        min=data[i];//.假设第一个位置的元素是最小的设为min
        for(j=i+1;j<n;j++)
        {
            if(data[j]<min)//一旦发现比min小的元素则把min的值换成比它小的元素值
            {
                minpos=j;//记下最小元素的值与坐标
                min=data[j];
            }           
        }
        swap(&data[i],&data[minpos]);//交换第一个位置元素的值和序列中最小值元素所在位置的值
    }
}
int main()
{
    int data[10];
    for(int i=0;i<10;i++)
    {
        scanf("%d",&data[i]);
    }
    //bubble_sort(data,10);
    //insert_sort(data,10);
    //shell_sort(data,10);
    selection_sort( data,10);
    for(int i=0;i<10;i++)
    {
        printf("%d ",data[i]);
    }
    
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值