c语言排列大小

Python010

c语言排列大小,第1张

#include "stdio.h"

#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语言程序设计