实验四 一维数组、二维数组
一、实验目的与要求
1、熟练掌握一维数组、二维数组的定义、赋值和输入输出的方法。
2、掌握与数组有关的算法。
二、实验内容
1、(1)输入N个整数,使用冒泡排序,将数据由大到小输出。
#include ""
#include<>
void swap2(int*,int*);
void bubble(int a[],int n);
int main(void)
{
int n,a[8];
int i;
printf("Enter n(n<=8):");
scanf("%d",&n);
printf("Enter a[%d]:", n);
for(i=0;i
scanf("%d", &a[i]);
bubble(a,n);
printf("After sorted,a[%d]=", n);
for(i=0;i
prin tf("%3d",a[i]);
return 0;
}
是数组a中待排序元素的数量
是数组a中待排序元素的数量*/
外部循环---请问这个嵌套循环怎么理解*/
内部循环---请问这个嵌套循环怎么理解*/
{
int i,j;
for(i=1;i< n; i++)/*
for(j=0;j
if(a[j]>a[j+1])
swap2(&a[j],&a[j+1]); /*交换 */
void swap2(i nt *px,i nt *py)
{ int t;
t=*px;
*px=*py;
*py=t;
}
单向冒泡排序法:
//输入10个整数,按从大到小输出//
#in clude<>
void mai n()
int i,j,t,a[10];
printf("请输入10个整数\n");
for(i=0;i<10;i++)
sca nf("%d", &a[i]);
for(j=1;j<10;j++)
//10
个数要来回做(10-1)趟次//
for(i=1;i<11-j;i++)
//
第j趟要做(10-j)次比较//
if(a[i]>a[i-1])
//
每做完 趟,就会将数组中较小的 个
数沉淀下来,较大的数不断往上冒//
{t=a[i];a[i]=a[i-1];a[i-1]=t;}
prin tf("按从大到小排序输出结果是:\n");
for(i=0;i<10;i++)
prin tf("%-3d",a[i]);
prin tf("\n");
}
双向冒泡排序法:
//输入10个整数,按从大到小输出//
#in clude<>
void mai n()
{
int i,j,t,k,a[10];
printf("请输入10个整数\n");
for(i=0;i<10;i++) sea nf("%d", &a[i]);
for(j=1;j<10;j++)〃10个数要来回做(10-1)趟
次//
{for(i=1;i<11-j;i++)//第 j 趟要做(10-j)次比较,双
向冒泡法,是先从上至下两两比较一次//
if(a[i]>a[i-1])//每做完一趟,就会将数组中较小的一个
数沉淀下来,较大的数不断往上冒//
{t=a[i];a[i]=a[i-1];a[i-1]=t;}
for(k=i-1;k>0;k--)//与单向冒泡不同的是,这是双向冒泡的
关键,每一次从顶至下比较完一次后,同时再从下//
if(a[k]>a[k-1])//至上比较一次,也就是说每一趟数组
中的元素两两比较了两次,这就是双向冒泡排序了 //
{t=a[k];a[k]=a[k-1];a[k-1]=t;}
}
prin tf("按从大到小排序输出结果是:\n");
for(i=0;i<10;i++)
prin tf("%-3d",a[i]);
prin tf("\n");
}
$(2)输入N个整数,使用改进的冒泡排序,将数据由大到小输出
#include ""
#include<>
void swap2(int*,int*);
void bubble(int a[],int n);
int main(void)
{
int n,a[8];
int i;
printf("Enter n(n<=8):");
scanf("%d",&n);
printf("Enter a[%d]:", n);
for(i=0;i
scanf("%d", &a[i]);
bubble(a,n);
printf("After sorted,a[%d]=", n);
for(i=0;i
printf("%3d",a[i]);
return 0;
}
void bubble(int a[],int n) /*n 是数组 a 中待排