对于冒泡排序法
/*冒泡法
#include<stdio.h>
int main()
{
int i,j,k,n,max;
int a[10];
printf("请输入一个数组:\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<9;i++)
{
for(j=i+1;j<10;j++)
{
if(a[i]<a[j])
{
k=a[j];
a[j]=a[i];
a[i]=k;
}
}
}
for(i=0;i<10;i++)
{
printf("%4d",a[i]);
}
return 0;
}
*/
在第二个循环处,i和j的设定,有特别之处,不同于其他许多博客上的写法;
求一个数组的最大最小值及其下角标,
#include<stdio.h>
int main()
{
int i,j,k,n;
int a[10],b[10];
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
b[i]=a[i];
}
for(k=n=0,i=0;i<10;i++)
{
if(a[i]>a[0])
{
a[0]=a[i];
k=i;
}
if(b[i]<b[0])
{
b[0]=b[i];
n=i;
}
}
printf("最大值最小值分别为%6d,%6d,下角标为%d,%d",a[0],b[0],k,n);
}
*/
/*
#include<stdio.h>
int main()
{
int i,max,min,imax,imin,j,k;
int a[10];
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
max=a[0],min=a[0];
for(i=0;i<10;i++)
{
if(a[i]>max)
{
max=a[i];
imax=i;
}
if(a[i]<min)
{
min=a[i];
imin=i;
}
printf("imax的值为%d",imax);
}
printf("最大小分别为%6d%6d,下角标分别为%6d%6d\n",max,min,imax,imin);
}*/
我的思路被禁锢在了冒泡排序法的思想上,想让第一个元素变成最大最小值,然后用一个中间值k记录下最大最小的下角标,然而这样会导致数组顺序发生改变,而导致只能找到一个下角标,所以我不得不复制一个数组,也就是用到两个一模一样的数组,这样被打乱的数组就可以不用去管,在另一个数组中找到另一个下角标;
但其实并不需要如此繁琐,我只需用 max和min来当作中间值来记录数组中的最大最小值即可,这样不会打乱数组,而且程序更为简单易懂。