C语言数组排序

问题:设有数组定义int arr[N+1],在数组arr中已经有N个数据且递增有序,现在将x插入到数组arr的适当位置,使数组元素的值保持递增有序。

方法一:先将x存放在数组元素arr[N]中,再依次和前面的元素进行比较,若没有发生交换,直接跳出循环,程序结束。

#include <stdio.h>
#define N 10
int main(){
	
	int arr[N+1];
	int i,j,num;
	//依次输入前N个递增数据 
	for(i=0;i<N;i++){
		scanf("%d",&arr[i]);
	}
	//输入要插入的数据
	printf("请输入要插入的数据:"); 
	scanf("%d",&arr[N]);
	//从后向前比较
	j=N;
	for(i=N-1;i>=0;i--){
		if(arr[i]<arr[j]){
			break;
		}
		else{
			num=arr[i];
			arr[i]=arr[j];
			arr[j]=num;
		}
		j--;
	}
	for(i=0;i<N+1;i++){
		printf("%5d",arr[i]);
	}
	
}
1 2 3 4 5 60 70 80 90 100
请输入要插入的数据:15
    1    2    3    4    5   15   60   70   80   90  100
--------------------------------
Process exited after 19.13 seconds with return value 0
请按任意键继续. . .

方法二:和方法一类似,从数组的最后一个元素arr[N-1]开始依次与x进行比较。

若arr[i]<=x,直接跳出循环。这种解法类似于数据结构中在数组中插入元素,通过移动数据(交换数据)来实现数据序列递增。

代码如下:

#include<stdio.h>
#define N 10
void main()
{
	int arr[N+1]={10,20,30,40,50,60,70,80,90,99};
	int i,x;
	scanf("%d",&x);
	for(i=N-1;i>=0&&arr[i]>x;i--)
		arr[i+1]=arr[i];
	arr[i+1]=x;
	for(i=0;i<N+1;i++)
		printf("%4d",arr[i]);
	printf("\n");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值