插入數據,有序數組仍然有序
方法一:
在一個數組中完成的操作
代碼實現:
/*
2017年6月19日16:31:52
功能:向有序的數組中插入一個數據,但是數據仍然有序
*/
#include<stdio.h>
#define N 5
void sort(int a[],int num)
{
int i,j,temp1,temp2;
int end = a[N-2]; //a[N-2]是原數組的最大一個數據
if(num >= end) //如果插入的數據比原數組中的最大數據還大則插入到數組最后面
a[N-1] = num;
else //否則就是在數組的第一位置或者中間位置插入
{
for(i = 0; i < N-1; i++)
if(a[i] > num) //判斷插入數值與數組中的元素的大小
{
temp1 = a[i]; //先保存當前位置的值
a[i] = num; //插入數值
for(j = i+1; j < N; j++) //此處的for循環是對數據進行移位操作
{ //以下三行將插入位置之后的數依次向后移動
temp2 = a[j];
a[j] = temp1;
temp1 = temp2;
}
break; //找到合適的位置后就終止外層循環
}
}
}
int main()
{
int a[N]={5,8,10,20};
int i=0;
int num;
printf("原數組的表示形式:");
for(i=0;a[i]!='\0';i++) //a[i]!='\0'注意此形式的寫法
printf("%d\t",a[i]);
printf("\n輸入要插入的數:");
scanf("%d",&num);
sort(a,num);
printf("新數組的表示形式:");
for(i=0;i<N;i++)
printf("%d\t",a[i]);
printf("\n");
return 0;
}
/*
總結:
在VC++6.0中的顯示結果:
----------------------------------------------------------------
原數組的表示形式:5 8 10 20
輸入要插入的數:15
新數組的表示形式:5 8 10 15 20
----------------------------------------------------------------
此方法是在一個數組中完成的移動操作
*/
方法二:
在新的數組中存儲,並且完成操作
代碼實現:
/*
2017年6月19日15:03:14
功能:在有序的數組中插入一個數據之后,數組仍然是有序的
*/
#include"stdio.h"
#define N 10
#define M 9
int main()
{
int a[M] = {2,3,4,5,6,7,8,9,9};
int b[N];
int i, j, num;
printf("please input a number: ");
scanf("%d",&num);
if(num < a[0]) //找出插入的數據在數組中的下標位置
{
j = 0;
}
else if(num > a[M-1])
{
j = M;
}
else
{
for(i = 0; i < M; i++)
{
if( num == a[i])
{
j = i;
}
if( num > a[i]&& num < a[i+1])
{
j = i + 1;
}
}
}
for( i = 0; i < N;i++)
{
if(i < j)
{
b[i] = a[i];
}
if(i == j)
{
b[i] = num;
}
if(i > j)
{
b[i] = a[i-1];
}
}
printf("The new array is :");
printf("\n" );
for(i = 0; i < N; i++)
{
printf("%d\t",b[i]);
}
printf("\n" );
return 0;
}
/*
總結:
在VC++6.0中顯示的結果為:
————————————————————————————————————————
please input a number: 1
The new array is :
1 2 3 4 5 6 7 8 9 9
please input a number: 4
The new array is :
2 3 4 4 5 6 7 8 9 9
————————————————————————————————————————
采用一個新的數組進行存儲
*/