C语言中的选择排序法是什么?

具体说一下是什么?... 具体说一下是什么? 展开
 我来答
风若远去何人留
2015-09-26 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450132
专业C/C++软件开发

向TA提问 私信TA
展开全部

选择排序(Selection sort)是一种简单直观的排序算法。工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 

以下是一个实现选择排序的例子:

#define SWAP(x, y, t)  ((t) = (x), (x) = (y), (y) = (t))
 //将list中的n个数据,通过选择排序算法排序。
void selete_sort(int list[], int n)
{
    int i, j, min, temp;
    for (i = 0; i < n - 1; i++){
        min = i;
        for (j = i + 1; j < n; j++)//找出最小元素的下标。
            if (list[j] < list[min])
                min = j;
        SWAP(list[i], list[min], temp);//交换最小元素到当前起始位置。
    }
}
帅聪虎伟兆
2019-01-19 · TA获得超过3755个赞
知道大有可为答主
回答量:3136
采纳率:28%
帮助的人:210万
展开全部
这是选择排序。先用a[0]与a[1]比较,当a[0]<a[1]时并不交换,而用k记下来现在a[0]最小……这样一趟比较完后a[k]就是整个数组中最小的元素,把它与a[0]交换;第二趟,从a[1]开始重复前面的操作,那么最后a[1]就是剩下的n-1个元素中最小的……看a[0]、a[1]已经由小到大排好了,当做完n-1趟时不就把整个数组都排好了吗?注意:t=array[k];array[k]=array[i];array[i]=t;不是for(j=i+1;j<n;j++)的循环体,要等它循环完了后才执行一次。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
哥们儿会_臭臭
2015-09-09 · TA获得超过876个赞
知道小有建树答主
回答量:421
采纳率:50%
帮助的人:188万
展开全部
每次选择没有排序元素中最小的排到前面
时间复杂度O(n^2)
空间复杂度O(n)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lucasf
2006-11-27 · 超过44用户采纳过TA的回答
知道小有建树答主
回答量:125
采纳率:0%
帮助的人:0
展开全部
首先从要选择的数中选择最大的数,将它放在第一个位置,然后从剩下的数中选择最大的数放在第二个位置,直到最后从剩下的两个数中选择最大的数放在倒数第二个位置,剩下的一个数放在最后位置,完成排序。

这类问题你用搜索器搜一下就有上千上万篇!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
esinc
2006-11-27 · TA获得超过719个赞
知道小有建树答主
回答量:1375
采纳率:0%
帮助的人:792万
展开全部
就像这样啊~输入10个数进行排序
main()

{int*p,i,a[10];

p=a;

for(i=0;i<10;i++)

scanf("%d",p++);

p=a

sort(p,10);

for(p=a,i=0;i<10;i++)

{printf("%d",*p);p++;}

}

sort(int x[ ],int n)

{int i,,j,k,t;

for(i=0;i<n-1;i++)

{k=i;

for(j=i+1;j<n;j++)

if(x[j]>x[k]) k=j;

if(k!=i)

{t=x[i];x[i]=x[k];x[k]=t;}

}

}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式