题目描述

对输入的n个数进行排序并输出。

输入格式

输入的第一行包括一个整数n(1<=n<=100)。 接下来的一行包括n个整数。

输出格式

可能有多组测试数据,对于每组数据,将排序后的n个整数输出,每个数后面都有一个空格。
每组测试数据的结果占一行。

样例输入

复制

5
5 4 3 1 2

样例输出

复制

1 2 3 4 5 

解法一:

#include <stdio.h>    
#include <string.h>
#include <ctype.h>      
#include <stdlib.h>   
#include <io.h>  
#include <math.h>  
#include <time.h>

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0


//typedef int Status; 


#define MAXSIZE 10000  /* 用于要排序数组个数最大值,可根据需要修改 */
typedef struct
{
	int r[MAXSIZE+1];	/* 用于存储要排序数组,r[0]用作哨兵或临时变量 */
	int length;			/* 用于记录顺序表的长度 */
}SqList;

/* 交换L中数组r的下标为i和j的值 */
void swap(SqList *L,int i,int j) 
{ 
	int temp=L->r[i]; 
	L->r[i]=L->r[j]; 
	L->r[j]=temp; 
}

void print(SqList L)
{
	int i;
	for(i=1;i<=L.length;i++)
		printf("%d,",L.r[i]);
//	printf("%d",L.r[i]);
	printf("\n");
}

/* 对顺序表L作简单选择排序 */
void SelectSort(SqList *L)
{
	int i,j,min;
	for(i=1;i<L->length;i++)
	{ 
		min = i;						/* 将当前下标定义为最小值下标 */
		for (j = i+1;j<=L->length;j++)/* 循环之后的数据 */
        {
			if (L->r[min]>L->r[j])	/* 如果有小于当前最小值的关键字 */
                min = j;				/* 将此关键字的下标赋值给min */
        }
		if(i!=min)						/* 若min不等于i,说明找到最小值,交换 */
			swap(L,i,min);				/* 交换L->r[i]与L->r[min]的值 */
	}
}
//#define N 9
int main()
{
   
int i;
   
   int N;
   int d[N];
   while(scanf("%d",&N)!=EOF){
	
	for(i=0;i<N;i++){
		scanf("%d", &d[i]);
	}	
   SqList l3;
   for(i=0;i<N;i++)
   l3.r[i+1]=d[i];
   l3.length=N;
   
   
   printf("选择排序:\n");
   SelectSort(&l3);
   print(l3);
   }
   }

法二

#include<stdio.h>
int main() {
    int n;
    int i,j;
    while (scanf("%d", &n) != EOF) {  //结束标志 
        int arr[n], min, temp;
        for ( i = 0; i < n; i++)   //输入 
            scanf("%d", &arr[i]);
        for ( i = 0; i < n - 1; i++) {       //选择排序 
            min = i;
            for ( j = i + 1; j < n; j++)
                if (arr[min] > arr[j])
                    min = j;
            temp = arr[i];
            arr[i] = arr[min];
            arr[min] = temp;
        }
        for ( i = 0; i < n; i++)    //输出结果 
            printf("%d ", arr[i]);
        printf("\n");
    }
    return 0;
}

简单来说,简单选择的本质是最基础的冒泡排序的进化,冒泡排序是边处理边查找,但简单选择原理是先查找好了,找到最小值了,然后直接进行sort交换,不用像冒泡一样,每次都要交换。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐