蓝桥杯基础2:BASIC-13试题 数列排序(c语言)

资源限制

内存限制:512.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s

问题描述

  给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200

输入格式

  第一行为一个整数n。
  第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。

输出格式

  输出一行,按从小到大的顺序输出排序后的数列。

样例输入

5
8 3 6 4 9

样例输出

3 4 6 8 9

采用了冒泡排序

#include <stdio.h>
void BubbleSort(int A[],int n)//冒泡排序 
{
 int i, j;
 int temp;
 for(i = 0; i <= n-2; i++)
 //{这些括号可以省略 
   for (j = 0; j <= n-2-i; j++)
  //{
   if(A[j + 1] < A[j])
   {
    temp = A[j];
    A[j] = A[j + 1];
    A[j + 1] = temp;
   }
 // }
 //}
}
int main()
{
 int A[200];//题目要求数列元素数目不能超过200 
 int i;
 int n;
 scanf("%d",&n);//输入个数 
 for (i = 0; i < n; i++)//输入元素 
 {
  scanf("%d",&A[i]);
 }
 BubbleSort(A,n);
 for (i = 0; i < n; i++)//输出元素 
 {
  printf("%d ",A[i]);
 }
 return 0; 
}

详细解说:

//题目:给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
//采用数组A[200] ,有n个数,A[n-1]为最后一个数 

//头文件
#include<stdio.h> /*standard input output的缩写,意为"标准输入输出",
即通常我们使用输入函数scanf,输出函数printf,scanf和printf是标准输入输出函数,
其头文件为stdio.h,在主函数前也用include命令包含了stdio.h文件。*/

void maopao(int A[],int n)//注意:此处 为A[],不可以为 A[n-1] 
{
	//定义 
	int i,j,temp;
	//冒泡排序 
	for(i=0;i<n-1;i++)
	{ //外层循环。比较次数,一共有n个数,只要 n-1轮次即可,所以取 0~n-2次 , 也就是i=0;i<n-1; 	 
		for(j=0;j<n-1-i;j++) 
		{//用i<n-1-i,而不用i<n-i,是因为最后剩下的那一个元素没有需要比较的元素了   
			if(A[j]>A[j+1]) 
			{
				temp=A[j+1];
				A[j+1]=A[j];
				A[j]=temp;
			}
		}
	}
}
int main(){
	//定义 
	int A[200];
	int i,n;
	scanf("%d",&n) ;//scanf语句此处A[i]需要用  & 
	
	//输入 
	for(i=0;i<n;i++) //也可以为 for(i=0;i<=n-1;i++)
	/*先 i=0,然后判断i<n是否成立,成立则进入并执行循环体,最后进行i++操作,
	再判断i<n是否成立,成立则继续,否则结束循环体,进入下一步操作 
	当 i=n-1,满足 i<n成立,执行循环体,而后i++,也就是i=n ,不满足 i<n,结束。 
	*/
	scanf("%d",&A[i]);
	maopao(A,n);//注意:此处 为A,不可以为 A[n-1] 
	
	//输出 
	for(i=0;i<n;i++)
	printf("%d ",A[i]);//此处A[i]不用& 
	//此处用  "%d "  %d后面空了一格,这样就会输出一个空格,元素就会分开
	 
	return 0;//注意:不要漏了return 0; 
}

采用dev运行

时间大概0.33S-0.42S

空间大小如下

运行测试:

 

采用选择排序

 

#include <stdio.h>
void SelectSort(int A[],int n)//选择排序 
{
	int i,j,min,temp;
    for(i = 0;i <= n-2;i++)  //最外层遍历
	{
		min=i;
		for(j = i+1;j <= n-1;j++) //开始找无序区的最小元素
		if(A[j] < A[min]) 
			min=j;   //记录最小值
        if(min!=i)
		{
    
			temp=A[i];
			A[i]=A[min]; 
			A[min]=temp; //将最小值放到有序区中
  }
 }
}
int main()
{
 int A[200];//题目要求数列元素数目不能超过200 
 int i;
 int n;
 scanf("%d",&n);//输入个数 
 for (i = 0; i < n; i++)//输入元素 
 {
  scanf("%d",&A[i]);
 }
 SelectSort(A,n);
 for (i = 0; i < n; i++)//输出元素 
 {
  printf("%d ",A[i]);
 }
 return 0; 
}

采用dev运行

时间大概0.31S-0.39S

空间大小如下

 运行测试

猜你喜欢

转载自blog.csdn.net/weixin_60530224/article/details/128627703
今日推荐