在我第一次拿到这个题目的时候,我只会用一个for语句,我调试了很久,结果就是不尽如人意。后来我才知道要用连个for语句才能做到排序的目的。我会的第一个办法就是冒泡法。就是控制第一个for语句的变量,因为他总是要在第二个for语句循环完一圈后在改变,所以就可以把第一个元素拿来和后面的相比较一次,然后把小的或者打得放在前面,依次循环,结果就出来了。以下是我写的,没有用到函数的传递,当然可以改成函数传递的,有什么不足之处请一定要指出来。之后我还学到了其他方法也一并分享一下。
#include<stdio.h>
main()
{
double a[100] , m ; // 定义了数组和数组的类型
int i ,j , n
; // 定义了循环控制变量和要输入的数组的长度
printf("请输入数组的长度:"); // 提示用户输入数组的长度
scanf("%d",n);
printf("请输入数组的元素:");
for(i=0;i<n;i++)
{
scanf("%d",m);
a[i]=m;
}
printf("排序前:");
for(i=0;i<n;i++)//输出每个元素
{
scanf("%d",a[i]);
}
a[i]='\0'; // 给数组的尾部人工放置字符结束符
for(i=0;i<n-1;i++)//使用冒泡法排序
{
for(j=1;j<n;j++)
{
if(a[i]>a[j])
{
m=a[i];
a[i]=a[j];
a[j]=m;
}
}
}
printf("排序后:");
for(i=0;i<n;i++)//输出每个元素
{
scanf("%d",a[i]);
}
}
冒泡排序法:
void sort(int a[] ,int n )
{
int i , j , k ;
for(i+1;i<n;i++)
for(j=0;j<n-i;j++)
{
if(a[j]>a[j+1])
{
k=a[j];
a[j]=a[j+1];
a[j+1]=k;
}
}
}
选择排序法:
void sort(int a[], int n)
{
int i ,j k, t;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(a[k]<a[j])
k=j;
if(k!=i)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
}