选择排序

这次学习一下选择排序。
首先先从待排序序列中选择一个最小的放在第一个位置,然后再从余下的序列中选择一个次小的放在第二个位置。然后重复的选择下去,直到所有元素排完。
假设有一个序列a【5】={2,1,0,6,4}
我们可以假设最小的值就在a【0】处,这样我们就从a【1…4】中一次从左到右的与假设的最小值比较,如果比假设的值小,那么最小值得下标就更改,最值也更改,直到找到最小值,然后与a【0】交换。

开始:
{【2】,1,0,6,4} 此时下标min = 0;最小值minval =A【0】;

接着在a【1…4】中找比minval小的元素
{2,【1】,0,6,4}此时找到min=1,minval=A【1】;

继续在a【2…4】中找比minval小的元素
{2,1,【0】,6,4} 此时找到min=2,minval=A【2】;

最后继续在a【3..4】中查找,没有比minval更小的元素了,此时第一次查找结束
交换a【2】 与A【0】

这时的序列是这样子:
a【5】={【0】,1,2,6,4}

这是自己写的一段测试代码:

#include<stdio.h>
void select_sort(int A[],int size);//函数声明
int main()
{
    int a[13]={3,2,4,0,1,9,6,12,5,7,34,22,11};//初始序列
    select_sort(a,13);//调用选择排序函数
    int j=0;
    while(j<13)//输出排好序的数组
    {
        printf("%d\n",a[j]);
        j++;
    }

    return 0;
}

void select_sort(int A[],int size)//选择排序
{
    int i,j;
    for(i = 0;i<size-1;i++)//这里直到size-1就可以了,因为前size-1个排好了,最后一个就在正确位置
    {
               int min = i;//假设的初始最小值下标 min=i
               int minval = A[i];//假设的初始最小值minval为A【i】             
        for(j = i+1;j<size;j++)//在余下的序列A【i+1...size】中选择最小值
        {   

            if(A[j]<minval)//如果A【j】小于minval
            {

            min = j;//更改最小值下标
            minval=A[j];//更改最小值
            }

        }
            int temp;
            temp = A[i];
            A[i]=A[min];
            A[min]=temp;    //交换找到的最小值与初始假设的最小值的位置
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值