#include "stdlib.h"//使用malloc函数必须的头文件
int main()
{
int i=0,j=0,k=0
int n,m
int * a,* b//动态数组应该定义为指针
scanf("%d",&n)//输入格式中去掉\n
a = (int *)malloc(n*sizeof(int))//然后由malloc函数根据输入的n分配空间
b = (int *)malloc(n*sizeof(int))
m=n-1
for(k=0k<=mk++)
{
scanf("%d",&a[k])//输入格式中去掉\n
}
for(k=0k<=mk++)//范围是到k<=m,原来少一个元素所以最后有个0
b[k]=0
for(k=0k<=mk++)//范围是到k<=m,原来少一个元素所以最后有个0
{
i=0
j=0
do
{
if(b[j]<=a[k])
{
for(i=mi>ji--)
{
b[i]=b[i-1]
}
b[j]=a[k]
break
}
else
j=j+1
}
while(j<=m)
}
for(k=0k<=mk++)
printf("%d\n",b[k])
return 0
}
可以拷贝试验,已验证结果正确
#define N 10//宏定义,用N代替10#include "stdio.h"//标准输入输出库,你在控制台输入数据和显示数据用的
main()//主函数
{
int a[N],i,j,temp//声明需要排序的数组a和排序用的的一些“小工具”,i、j、temp
printf("请输入%d个整数:\n",N)
for(i=0i<Ni++)//这个循环是和用户交互,手动输入10个数理组成数组
scanf("%d",&a[i])
for(i=0i<N-1-ii++)//i从前往后数
for(j=0j<N-1-ij++)//在每一个i(比如0,比如1)下从前往后数j
if(a[j]>a[j+1])//如果j比他后边的大,交换
{temp=a[j]a[j]=a[j+1]a[j+1]=temp}//两数前后互换
//上边这个循环就是从前往后数a的元素,比如到a[0],那么最大的数移到最后一位;在比如a[1],倒数第二大的数移到倒数第二位(因为最大的在后边,你移步过去了?)
//为什么要走这么多次。每次j的循环都好比一个波浪,一次只能保证一个最大数到了最后一位,其他的可能还是乱序,所以要一浪接一浪。
//这个算法的巧妙之处在于,i只走一半,也就是i从0到4,而j每次也不用到最后一位(j<N-1-i),因为最后那i+1位已经排好了
//比较次数,i=0时9次,i=1时8次,i=2时7次,i=3时6次,i=4时5次,一共35次
printf("排序之后的数据序列:\n")
for(i=0i<Ni++)//把排序后的数列显示出来,%5d代表每一个数占5位,就是排列的整齐点。
printf("%5d",a[i])
printf("\n")
}
#include"stdio.h"
#define N 10
main()
{
int a[N],i,j,r,temp
printf("请输入%d个整数:\n",N)
for(i=0i<Ni++)
scanf ("%d",&a[i])
for(i=0i<N-1i++)//用i遍历数组a。
{r=i//局部的r值,i从0到8每次不同,r也不同。
for(j=i+1j<Nj++)//j是从i当前的值一直到最后(前一种排序时每次j的结尾位置不同,到9,到8.到7。)
if(a[j]<a[r])r=j//用r标记最小的一个值,
if(r!=i)//如果这个最小的值不是a[i],对换,让i所在值变成最小,意思是a[0]最小,a[1]第二小,以此类推
{temp=a[r]a[r]=a[i]a[i]=temp}
}
printf("排序之后的数据序列:\n")
for(i=0i<Ni++)
printf("%5d",a[i])
printf("\n")
//i=0,j循环9次;i=1,j循环8次。。。。一共45次
}
我把函数改了,这样可以测试,你去跑一下就明白过程了
#include"stdio.h"
#define N 10
main()
{
int count = 0
int a[N],i,j,r,temp
printf("请输入%d个整数:\n",N)
for(i=0i<Ni++)
scanf ("%d",&a[i])
for(i=0i<N-1i++)
{r=i
for(j=i+1j<Nj++){
if(a[j]<a[r])r=j
count++
printf("i:%d\tj:%d\tcount:%d\n",i,j,count)
}
if(r!=i)
{temp=a[r]a[r]=a[i]a[i]=temp}
}
printf("排序之后的数据序列:\n")
for(i=0i<Ni++)
printf("%5d",a[i])
printf("\n%d\n",count)
}
排序数组可以使用冒泡算法:如果前一个数据比后一个大,则交换。
{
int i,j,t,a[6]
printf("Please input 6 integers:\n")
for(i=0i<6i++)
scanf("%d",&a[i])
for(i=0i<5i++) /* 冒泡法排序 */
for(j=0j<6-i-1j++)
if(a[j]>a[j+1])
{t=a[j]/* 交换a[i]和a[j] */
a[j]=a[j+1]
a[j+1]=t
}
优点:
简洁紧凑、灵活方便:C语言一共只有32个关键字,9种控制语句,程序书写形式自由,区分大小写。把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
以上内容参考:百度百科-c语言程序设计