数组(包括排序)
定义与说明
- 数组的下标只能是整型常量或整型表达式,不能是变量。
- 数组元素全为零时,定义时可以如下定义
int a[100] = {0};
- 当给出数组全部值时,可以如下定义
int a[] = {1,2,3,4,5};
冒泡排序法
#include "stdio.h"
#define N 5
void main()
{
//变量定义
int i, j;
int a[N], t;
//提示信息
printf("Please enter %d numbers:\n",N);
//数据输入
for(i=0; i<N; i++)
scanf("%d", &a[i]);
//排序算法
for(i=0; i<N-1; i++) //N-1次排序
for(j=0; j<N-1-i; j++) //第一次比较N-1次,逐次递减
{
if(a[j]>a[j+1]) //交换顺序(由小到大,由大到小改为<号)
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
//数据输出
for(i=0; i<N; i++)
printf("%d ", a[i]);
}
选择排序法
#include "stdio.h"
#define N 5
void main()
{
//变量定义
int i, j, t;
int a[N], k;
//提示信息
printf("Please enter %d numbers:\n",N);
//数据输入
for(i=0; i<N; i++)
scanf("%d", &a[i]);
//排序算法
for(i=0; i<N-1; i++) //N-1次选择
{
k = 0; //默认第一个数最大(小)
for(j=1; j<N-i; j++) //选择最大(小)数的角标
if(a[k]<a[j])
k = j;
t = a[N-1-i]; //交换数据
a[N-1-i] = a[k];
a[k] = t;
}
//数据输出
for(i=0; i<N; i++)
printf("%d ", a[i]);
}
数据插入
在有序数组指定位置插入任意N个数
#include "stdio.h"
#define N 5
void main()
{
//变量定义
int n[10+N] = {0,1,2,3,4,5,6,7,8,9};
int a[N], k;
int i;
//提示信息与数据输入
printf("Please enter the insertion location:\n");
scanf("%d", &k);
printf("Please enter %d numbers:\n",N);
for(i=0; i<N; i++)
scanf("%d", &a[i]);
//数据插入
for(i=10-1; i>=k; i--)
n[i+N] = n[i];
for(i=k; i<k+N; i++)
n[i] = a[i-k];
//数据输出
for(i=0; i<10+N; i++)
printf("%d ", n[i]);
}
数据删除
#include "stdio.h"
void main()
{
//变量定义
int n[10] = {0,1,2,3,4,5,6,7,8,9};
int k, i, j;
//提示信息与数据输入
printf("Please enter the data to be deleted:\n");
scanf("%d", &k);
//数据删除(只删除第一个位置)
for(i=0; i<10; i++)
if(n[i]==k)
{
for(j=i; j<10-1; j++)
n[j] = n[j+1];
break;
}
//数据输出
if(i==10)
printf("Data not found!\n");
else
for(i=0; i<10-1; i++)
printf("%d ", n[i]);
}