书写c语言排序函数

Python029

书写c语言排序函数,第1张

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

void sort(int a[],int n)

{ int i,j,t

for(i=0 i<n-1 i++) //共进行n-1轮

{ for(j=0 j<n-1-i j++) //j的范围:0~n-1-i

if(a[j]>a[j+1]) //比较相邻两数:a[j]、a[j+1],如不对就交换

{ t=a[j]

a[j]=a[j+1]

a[j+1]=t

}

}

}

int main()

{ int n,i,a[10000]

scanf("%d",&n)

srand(time(0))

for(i=0 i<n i++)

{ a[i]=rand()%100

printf("%4d",a[i])

}

printf("\n")

sort(a,n)

for(i=0 i<n i++)

printf("%4d",a[i])

printf("\n")

return 0

}

一群菜鸟不懂的乱说。 我把楼主的代码改了一些,如下 #include<stdio.h>int input(int data[], int argc, int *n)

{

int i

printf("请输入要输入数的个数")

scanf("%d", n)

if(*n >argc) {

printf("segment fault!")

return -1

}

for(i = 0i <*ni++) {

printf("输入的第%d个数.", i+1)

scanf("%d", data+i)//canf("%d", &data[i])

}

printf("输入的数是:\n")

for(i = 0i <*ni++) {

printf("%5d\n", data[i])

}

return 0

}void sort(int n, int data[])

{

int i, j, temp

for(i = 0i <n-1i++) {

for(j = i+1j <nj++)

if(data[i] <data[j]) {

temp = data[i]

data[i] = data[j]

data[j] = temp

}

}

printf("排序后的结果如下:\n")

for(i = 0i <ni++)

printf("%5d\n", data[i])

}int main()

{

int data[100]

int n

if(input(data, 100, &n) == -1)

return -1

sort(n, data)

return 0

}

对于以上代码,做出如下解释:(1)C语言的参数有形参和实参的说法,形参在传递到函数内的时候,复制一个副本给函数,在函数内部和外部是两个完全不同的变量,函数结束,空间也被释放,所以不能在函数内部来改变外部的值。所以要像楼主这样用一个函数给一个变量赋值,要用实参int input(int data[], int argc, int *n)中的int *n就是实现形式,这种办法把n的地址传递给函数。当然,在调用函数的时候也同样要传递地址指针类型(&n)。(2)if(*n >argc) {

printf("segment fault!")

return -1

}这一段是我加进去的,因为按照楼主的意思,data数组的长度也要传递进去,但是意思何在?所以只好加了这一段,并把函数改为有类型的,以检验是否有数据溢出。(3)scanf("%d", data+i)//scanf("%d", &data[i])这里我改动的主要原因是为了提升程序速度,scanf("%d", &data[i])同样可以运行,但是寻址一次,又回头要地址,这样绕了一圈,没有必要。 对于楼主提几点建议:(1)C语言的精髓在于指针,刚才说到的实参,就是用指针的概念实现的。scanf("%d", data+i)一行,同样也是把数组头指针加上偏移地址,得到所要的地址。(2)C语言编程的时候特别要注意数据的溢出,这是所有初学者头疼的问题之一。建议在一开始就养成习惯,经常检验数组的边界。(3)void main一看就知道是看潭浩强的书长大的程序员。建议我们都用int main(){ return 0}的形式,可以看看C语言之父K&R的书。主函数的返回值是告诉操作系统,这个函数是正常退出(返回0),还是异常退出(非0,经常是-1)。(4)在做实际项目的时候,程序经常是要回头看的,也经常是要给别人看以达到维护的目的的。除了要养成良好的文档书写习惯以外(学习软件工程以后你就会掌握),还要养成良好的编程风格,这里我建议看《thinking in C++》,并按照里面例题的风格,养成自己的习惯。

sort不属于C语言的标准函数,所以也没有相应的头文件,但是可以自定义。

sort 函数为将整型数组从小到大排序。

voidsort(int*a,intl)//a为数组地址,l为数组长度。

{

inti,j

intv

//排序主体

for(i=0i<l-1i++)

for(j=i+1j<lj++)

{

if(a[i]>a[j])//如前面的比后面的大,则交换。

{

v=a[i]

a[i]=a[j]

a[j]=v

}

}}

扩展资料

c语言自有的qsort函数

#include<stdio.h>

#include<stdlib.h>

intcomp(constvoid*a,constvoid*b)//用来做比较的函数。

{

return*(int*)a-*(int*)b

}

intmain()

{

inta[10]={2,4,1,5,5,3,7,4,1,5}//乱序的数组。

inti

qsort(a,n,sizeof(int),comp)//调用qsort排序

for(i=0i<10i++)//输出排序后的数组

{

printf("%d\t",array[i])

}

return0

}