1. 程式人生 > >C語言——例項039 有一個已經排好序的陣列。現輸入一個數,要求按原來的規律將它插入陣列中

C語言——例項039 有一個已經排好序的陣列。現輸入一個數,要求按原來的規律將它插入陣列中

第一個程式:有bug,但沒發現

/*
	Name: 
	Copyright: 
	Author: 
	Date: 31/07/17 11:42
	Description: 
		【程式39】題目:有一個已經排好序的陣列。現輸入一個數,要求按原來的規律將它插入陣列中。
	1. 程式分析:首先判斷此數是否大於最後一個數,然後再考慮插入中間的數的情況,
	插入後此元素之後的數,依次後移一個位置。 
	?
*/

#include <stdio.h>

int main()
{
	int a[100],temp,i,j,n,min;
	
	int x,temp2;	
	
	/*輸入待排序資料*/	
	printf("請輸入待排序的數的個數:");
	scanf("%d",&n);
	printf("\n請輸入%d個數:",n);
	for(i = 0;i < n;i++)
	{
		scanf("%d",&a[i]);
	}
	printf("\n");
	
	/*排序*/ 
	for(i = 0;i < n - 1;i++)
	{
		min = i;
		for(j = i + 1;j < n;j++)
		{
			if(a[min] > a[j]) 
			{
				min = j;
			}						
		}
		temp = a[i];
		a[i] = a[min];
		a[min] = temp;			
	}
	
	/*輸出排序*/ 
	printf("從小到大排序後的%d個數為:\n",n);
	for(i = 0;i < n;i++)
	{		
		printf("%-5d",a[i]);
	}
	printf("\n\n");

	/*插入*/
	while(printf("請輸入插入資料:") && scanf("%d",&x) != EOF) 
	{
		printf("\n");
		n++;
		if(x >= a[n - 2])
		{
			a[n - 1] = x;
			printf("從小到大排序後的%d個數為:\n",n);
			for(i = 0;i < n;i++)
			{		
				printf("%-5d",a[i]);
			}
			printf("\n\n");
		}
		else
		{
			for(i = 0;i < n - 2;i++)
			{
				if(x < a[i])
				{
					temp = a[i];
					a[i] = x;
					for(j = i + 1;j < n;j++)
					{
						temp2 = a[j];
						a[j] = temp;
						temp = temp2;
					}
					break;
				}
			}
			printf("從小到大排序後的%d個數為:\n",n);
			for(i = 0;i < n;i++)
			{		
				printf("%-5d",a[i]);
			}
			printf("\n\n");
		} 
	}
	return 0;
}

執行結果:

第二個程式:沒有仔細測試

/*
	Name: 
	Copyright: 
	Author: 
	Date: 31/07/17 11:42
	Description: 
		【程式39】題目:有一個已經排好序的陣列。現輸入一個數,要求按原來的規律將它插入陣列中。
	1. 程式分析:首先判斷此數是否大於最後一個數,然後再考慮插入中間的數的情況,
	插入後此元素之後的數,依次後移一個位置。 
	
	?
*/

#include <stdio.h>
#include<stdlib.h>

int cmp(const void *a,const void *b)
{
	return (*(int *)a-(*(int *)b));		//從小到大 
}

int main()
{
	int a[100],temp,i,j,n,min;
	
	int x,temp2;	
	
	/*輸入待排序資料*/	
	printf("請輸入待排序的數的個數:");
	scanf("%d",&n);
	printf("\n請輸入%d個數:",n);
	for(i = 0;i < n;i++)
	{
		scanf("%d",&a[i]);
	}
	printf("\n");
	
	/*排序*/ 
	qsort(a,n,sizeof(int),cmp);
	
	/*輸出排序*/ 
	printf("從小到大排序後的%d個數為:\n",n);
	for(i = 0;i < n;i++)
	{		
		printf("%-5d",a[i]);
	}
	printf("\n\n");

	/*插入*/
	printf("請輸入插入資料:");
	scanf("%d",&x);
	a[n] = x;
	qsort(a,n + 1,sizeof(int),cmp);
	printf("\n從小到大排序後的%d個數為:\n",n + 1);
	for(i = 0;i < n + 1;i++)
	{		
		printf("%-5d",a[i]);
	}
	printf("\n\n");
	
	return 0;
}