首先看最简单的2个数的比较排序。
方法一:
最最简单、直接的方法,利用比较。
#include <stdio.h>
int main()
{
int x,y;
int tem;
printf("请输入两个数:\n");
scanf("%d",&x);
scanf("%d",&y);
printf("x=%d\n",x);
printf("y=%d\n",y);
if(x>y)
{
tem=x;
x=y;
y=tem;
}
printf("两个数从小到大排序的结果为:\n");
printf("%d %d\n",x,y);
return 0;
}
方法二:
利用指针和函数调用实现。
#include <stdio.h>
void swap(int *a,int *b)
{
int tmp;
if(*a>*b)
{
tmp=*a;
*a=*b;
*b=tmp;
}
}
main()
{
int x,y;
int *p_x,*p_y;
printf("请输入两个数:\n");
scanf("%d",&x);
scanf("%d",&y);
printf("x=%d\n",x);
printf("y=%d\n",y);
p_x=&x;
p_y=&y;
swap(p_x,p_y);
printf("两个数从小到大排序的结果为:\n");
printf("x=%d\n",x);
printf("y=%d\n",y);
return 0;
}
**
输入任意数字进行排序
**
用冒泡法进行比较然后排序:
#include <stdio.h>
//冒泡排序,由低到高
int main()
{
int a[100];
int temp;
char c;
int i, j,k=0;
printf("输入需要排序的数字:\n");
for(i=0; ;i++)
{
scanf("%d",&a[i]);
k++; //统计输入数字的个数
c=getchar(); //接受回车符判断结束
if(c=='\n')
break;
}
for (i = 1; i < k; i++) //冒泡排序
{
for (j = 0; j < i; j++)
{
if (a[j] > a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
printf("从小到大排序后的结果为:\n");
for (i = 0; i < k; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
函数调用和指针共同实现:
#include <stdio.h>
void order(int a[],int n)
{
int i,t,j;
for(i=1;i<n;i++)
for(j=0;j<i;j++)
if(*(a+j)>*(a+j+1)) /*判断相邻两个元素的大小*/
{
t=*(a+j);
*(a+j)=*(a+j+1);
*(a+j+1)=t; /*借助中间变量t进行值互换*/
}
printf("排序后的数组:");
for(i=0;i<n;i++)
{
printf("%5d",*(a+i));
}
}
int main()
{
int a[100],b,n=0;
int *d;
char c;
printf("输入数字:\n");
d=a;
for(b=0; ;b++)
{
scanf("%d",&a[b]);
n++;
c=getchar();
if(c=='\n')
break;
}
d=a;
order(d,n);
}