当前位置:首页 » 编程语言 » c语言数列选择法排序
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言数列选择法排序

发布时间: 2022-12-10 01:58:02

A. c语言中选择排序法具体是怎样的

选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。
简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。

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

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

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

#defineSWAP(x,y,t)((t)=(x),(x)=(y),(y)=(t))
//将list中的n个数据,通过选择排序算法排序。
voidselete_sort(intlist[],intn)
{
inti,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);//交换最小元素到当前起始位置。
}
}

C. C语言:用选择排序法对一个数组里的数进行排序,从小到大,要求选出小的进行排序

#include<stdio.h>

intmain()

{

inti=0;

inta[10]={0,5,2,3,6,9,8,7,4,1};

intj=0;

inttmp=0;

intm=sizeof(a)/sizeof(a[0]);//s数组大小

for(i=0;i<m-1;i++)//比较m-1次

{

for(j=0;j<m-i-1;j++)//最后一次比较a[m-i-1]与a[m-i-2]

{

if(a[j]>a[j+1])//如果a[j]比a[j+1]大则交换内容

{

tmp=a[j+1];

a[j+1]=a[j];

a[j]=tmp;

}

}

}

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

{

printf("%d",a[i]);//打印

}

printf(" ");

return0;

}

(3)c语言数列选择法排序扩展阅读

C语言排序法

把一个数组进行排序可以使用选择排序法。选择排序法的原理在是每一趟循环寻找数组中最小的数的下标,然后按照递增的顺序放入数组中。

循环找出最小数的下标,该下标用min保存,直到比较完整个数组,即可找到最小的数,然后将该数放入数组的第一位,这样就排好了一个元素。

需要再嵌套一层外层循环即可排好所有元素。第二次循环就不用再比较第一个元素了,因为第一个元素已经排好,依次类推,每一次循环就会排好一个,进行n-1次循环即可排好所有元素。

D. C语言选择排序法

这是选择排序。先用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++)的循环体,要等它循环完了后才执行一次。

E. c语言数组排序中的选择法是什么意思啊

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

C语言参考实例:

#include<stdio.h>
voidmain()
{
inta[]={1,3,4,2,0};
inti,j,n=5;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)//每一遍都与当前a[i]比较
if(a[i]<a[j])//大的前移
{
intt=a[i];
a[i]=a[j];
a[j]=t;
}

for(i=0;i<n;i++)
printf("%d",a[i]);
}

F. C语言选择法排序

排序如下:

voidSelectSort(RecordTyper[],intlength)/*对记录数组r做简单选择排序,length为待排序记录的个数*/

{inttemp;for(i=0;i<length-1;i++)//n-1趟排序{intindex=i;//假设index处对应的数组元素是最小的for(intj=i+1;j<length;j++)//查找最小记录的位置if(r[j].key<r[index].key)index=j;if(index!=i)//若无序区第一个元素不是无序区中最小元素,则进行交换{temp=r[i];r[i]=r[index];r[index]=temp;}}}

初始序列:{49 27 65 97 76 12 38}
第1趟:12与49交换:12{27 65 97 76 49 38}
第2趟:27不动:12 27{65 97 76 49 38}
第3趟:65与38交换:12 27 38{97 76 49 65}
第4趟:97与49交换:12 27 38 49{76 97 65}
第5趟:76与65交换:12 27 38 49 65{97 76}
第6趟:97与76交换:12 27 38 49 65 76 97 完成

选择排序法 是对 定位比较交换法(也就是冒泡排序法) 的一种改进。选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。

简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。

拓展资料

下面也写个例子:

由大到小时:


intmain(void){inta[10];inti,j,t,k;for(i=0;i<10;i++)scanf("%d",&a[i]);/*输入10个数,比武报名,报名费用10000¥^_^*/for(i=0;i<9;i++)/*10个数,所以只需比9次*/{k=i;/*裁判AND记者实时追踪报道比赛情况*/for(j=i+1;j<10;j++)if(a[k]<a[j])k=j;/*使a[k]始终表示已比较的数中的最大数*/if(k!=i){t=a[i];a[i]=a[k];a[k]=t;}/*t发放奖品*/}for(i=0;i<10;i++)printf("%4d",a[i]);/*显示排序后的结果*/return0;}

由小到大时:


intmain(void){inta[10];inti,j,t,k;for(i=0;i<10;i++)scanf("%d",&a[i]);/*输入10个数,比武报名,报名费用10000¥^_^*/for(i=0;i<9;i++){k=i;/*裁判AND记者实时追踪报道比赛情况*/for(j=i+1;j<10;j++)if(a[k]>a[j])k=j;if(k!=i){t=a[i];a[i]=a[k];a[k]=t;}/*t发放奖品*/}for(i=0;i<=9;i++)printf("%4d",a[i]);/*显示排序后的结果*/return0;}

G. C语言如何用选择法排序任意输入十个数(从大到小、从小到大)

#include
<stdio.h>
main(void)
{
int
i,j,a[10],p=0,t=0,temp;
printf("请输入原数组:\n");
for(j=0;j<10;j++)
scanf("%d",&a[j]);
temp=a[0];
for(j=0;j<9;j++)
{
t=j;
temp=a[j];
for(i=j+1;i<10;i++)
if(temp>a[i])
//这是由小到大排序
如果是大到小则改为
if(temp<a[i])
{temp=a[i];p=i;}
{temp=a[p];a[p]=a[t];a[t]=temp;}
}
printf("排序后的数组为:\n");
for(j=0;j<10;j++)
printf("%d
",a[j]);
}

H. c语言 选择法排序

void sa(int array[],int n)
{
int i,j,k,temp;
for(i=0;i<10;i++)
{
k=i; //保存i的值,用k来进行循环排序
for(j=i+1;j<n;j++) //将第i个元素后面的元素与第i个元素进行比较
if(array[j]<array[k]) //如果第k=i个元素后面的元素小于i号元素,交换两个元素的标号, 这样就将最小元素的标号放到最前面
k=j; //交换标号
temp=array[k]; //循环结束后,交换两个标号下的元素的值
array[k]=array[i];
array[i]=temp;
}
}
这个程序实现的是由小到大的排序。第二个循环里面,就是i号元素后面最小的元素对应的标号放到k中,在交换当前元素与k号元素中的值,实现由大到小排序