有序插入的兩種解法

題目描述
有一個已排好序的數組,要求輸入一個數後,按原來排序的規律將它插入到數組中。
假設數組長度爲10,數組中前9個數(這9個數要求從鍵盤上輸入,輸入時要滿足自小到大的輸入順序)已經按從小到大進行排序。
然後再從鍵盤上輸入一個整數,將此整數插入到前有序的9個數中,使得最終的10個數依然是從小到大有序的。
解法1
思路:先輸入有序的九個數字來填充數組。再輸入要插入的數,用該數分別與數組中的每個數字進行比較。

#include <stdio.h>
int main(){
	int a[10],x;
	printf("請輸入a[j]的值:");
	for(int j=0;j<9;j++){
	scanf("%d",&a[j]);
}
    printf("請輸入x的值:");
    scanf("%d",&a[9]);
    x=a[9];
for (int j=0;j<9;j++){
		if(a[j]<=x){
			int temp=a[j+1];
			a[j+1]=x;
			x=temp;
		}
}
    for(int j=0;j<10;j++){
	printf("%d\n",a[j]);
	}
	return 0;
}

解法2
思路:思路同上,只是把要插入的數字輸入成a[9],因爲我們一開始只輸入了九個數字,數組是從a[0]開始的,所以a[9]默認爲0,我們把要插入的數字輸入爲a[9]之後,用a[9]分別和a[0]到a[8]每一個數字進行比較。

#include <stdio.h>
int main(){
	int a[10],x;
	printf("請輸入a[j]的值:");
	for(int j=0;j<9;j++){
	scanf("%d",&a[j]);
}
    printf("請輸入x的值:");
    scanf("%d",&x);
for (int j=0;j<=8;j++){
		if(x<a[j])
		{ 
			int temp=a[j];
			a[j]=x;
			x=temp;
		}
		if(j==8)
		{
			a[9]=x; 
		}
}

    for(int j=0;j<10;j++){
	printf("%d\n",a[j]);
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章