A. 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;}
B. C语言编程——选择排序法,要求:由主函数调用排序子函数,对n个整数进行从小到大的排序,谢了
#include <stdio.h>
#define SIZE_N 20 //SIZE_N is the size of the array
void sortFun(int a[], int n)
{
int temp;
for(int i=0;i<n;i++) //进行n个循环,每次选出剩下的最小的数,如第一次选出n个数中最
for(int j=i+1;j<n;j++)//小的那个,如a[8],放入a[0],而将a[0]原来的值放入a[8].第二次
if(a[j]<a[i]) //就从a[1]到a[n-1]中找出最小的数放入a[1],以此类推。
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
void main()
{
int a[SIZE_N];
for(int i=0;i<SIZE_N;i++)
{
scanf("%d",&a[i]); //输入数据
}
sortFun(a,SIZE_N); //调用排序函数
for(int j=0;j<SIZE_N;j++)
{
printf("%d\n",a[j]); //输出数据
}
}
以上就是基本的程序,局部可以优化使其更人性化。读入数据和输出数据的方式可以考虑用文件的方式,但排序的函数才是关键。以上程序调试通过,希望可以帮到你。
C. C语言程序中的选择法排序是
每次从待序记录中选出排序码最小的记录,顺序放在已排好的记录序的后面,直到全部排完。
直接选择排序
void selectSort(SortObject * pvector)
{
int i,j,k;
RecordNode temp;
for(i=0;i<pvector->n-1;i++)
{
k=i;
for(j=i+1;j<pvector->n-1;j++)
{
if(pvector->record[j].key>pvector->record[k].key)
k=j;
if(k!=i){
temp=pvector->record[k];
pvector->record[k]=pvector->record[i];
pvector->record[i]=temp;
}
}
}
D. C语言编程:选择排序(随便写个就行)
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <time.h>
4
5 int main(void)
6 {
7 int a[10],i,j,tmp,b;
8 srand(time(NULL));
9 for(i=0;i<10;i++)
10 a[i]=rand()%100;
11 for(i=0;i<10;i++)
12 printf("%3d",a[i]);
13 printf("\n");
14 for(i=0;i<9;i++)
15 {
16 tmp=i;
17 for(j=i+1;j<10;j++)
18 if(a[tmp]>a[j])
19 tmp=j;
20 if(i!=tmp)
21 {
22 b=a[tmp];
23 a[tmp]=a[i];
24 a[i]=b;
25 }
26 }
27 for(i=0;i<10;i++)
28 printf("%3d",a[i]);
29 printf("\n");
30 return 0;
31 }
E. 在c语言中选择排序法
不加也没关系,不加的话就多一个a[i]跟a[i]互换
不过好像if(k != i)这个判断应该是要放到第二个循环外面才是选择排序。
#include<stdio.h>
#defineN6
intmain()
{
inti,j,k,t,a[N];
puts("InputNNumber:");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
putchar(10);
for(i=0;i<N-1;i++)
{
k=i;
for(j=i+1;j<N;j++)
{
if(a[k]<a[j])
k=j;
}
if(k!=i)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
for(i=0;i<N;i++)
printf("%3d",a[i]);
putchar(10);
return0;
}
F. 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号元素中的值,实现由大到小排序
G. C语言:设计选择排序排序的C语言程序。
选择法排序
#include <stdio.h>
#define N 10
int main()
{
int array[N];
for(int i=0; i<N; i++)
scanf("%d",&array[i]);
for(i=0; i<N; i++)
for(int j=i+1; j<N; j++)
{
if(array[i]<array[j])
{
int t=array[i];
array[i]=array[j];
array[j]=t;
}
}
for(i=0;i<N;i++)
{printf("%3d",array[i]); }
printf("\n");
return 0;
}
程序2
#include <iostream>
using namespace std;
void main()
{
int i,a[10],k=1,z,j;
cout<<"请任意输入10个数,进行排序."<<endl;
for(i=0;i<=9;i++)
{
cout<<"请输入第"<<k++<<"个数字"<<endl;
cin>>a[i];
}
for(i=0;i<=8;i++)
for(j=i+1;j<=9;j++)
if(a[i]<a[j])
{z=a[j];a[j]=a[i];a[i]=z;}
cout<<"从大到小顺序为"<<endl;
for(i=0;i<=9;i++)
cout<<a[i]<<' ';
}
H. C语言编程:选择法排序
选择排序是一种简单直观的排序算法。
工作原理:
每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
性能:
选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。
选择排序的时间复杂度是O(n^2)
思想:
n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:
①初始状态:无序区为R[1..n],有序区为空。
②第1趟排序
在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
……
③第i趟排序
第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
C语言版代码:
#include<stdio.h>
#include<math.h>
#defineMAX_SIZE101
#defineSWAP(x,y,t)((t)=(x),(x)=(y),(y)=(t))
voidsort(int[],int);/*selectionsort*/
intmain()
{
inti,n;
intlist[MAX_SIZE];
printf(":");
scanf_s("%d",&n);
if(n<1||n>MAX_SIZE){
fprintf(stderr,"Impropervalueofn ");
exit(1);
}
for(i=0;i<n;i++){/*randomlygeneratenumbers*/
list[i]=rand()*1000;
printf("%d",list[i]);
}
sort(list,n);
printf(" Sortedarray: ");
for(i=0;i<n;i++)/*printoutsortednumbers*/
printf("%d",list[i]);
printf(" ");
return0;
}
voidsort(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);
}
}
I. 简单选择排序的C语言编程
这题出得实在是够笼统。
最简单的,冒泡法排序。
#include<stdio.h>
voidbubble_sort(intary[],intlen){
inti,j,t;
for(i=0;i<len-1;i++)
for(j=0;j<len-1-i;j++)
if(ary[j]>ary[j+1]){
t=ary[j];
ary[j]=ary[j+1];
ary[j+1]=t;
}
}
intmain(){
intary[]={22,34,3,32,82,55,89,50,37,5,64,35,9,70};
intlen=(int)sizeof(arr)/sizeof(*arr);
bubble_sort(ary,len);
inti;
for(i=0;i<len;i++)
printf("%d",ary[i]);
return0;
}
这里,你所言及的记录,可能是一个结构,看你自己的定义修改了。
J. 用C语言编程:用选择法对10个整数排序,10个整数用scanf函数输入
1、打开visual C++ 6.0,准备一个空白的c语言文件,引入头文件,在main函数中定义变量和数组: