程序解读C语言

来源:百度知道 编辑:UC知道 时间:2024/05/09 01:12:02
#include <stdio.h>
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[j]>a[k])k=j;
if(k!=i)
{t=a[i];a[i]=a[k];a[k]=t;}
}
}

void main()
{
int *p,i,a[10];
p=a;
for(i=0;i<10;i++)
scanf("%d",p++);
p=a;
sort(p,10);
for(p=a,i=0;i<10;i++)
{printf("%d ",*p);
p++;
}
}

帮我解释一下定义的sort这个函数,,我怎么看不懂

sort()是个排序函数,作用是对传入的数组a进行排序,数组a是个整型数组,共有n个元素(下标是0~n-1)

这个函数使用了选择排序算法,即逐个从数组中选出第c大的数,并将其放在第c位

for(i=0;i<n-1;i++) //外循环,用于找第i大的数
{k=i;//标记出现在的i值
for(j=i+1;j<n;j++)
if(a[j]>a[k])k=j;//从i+1到n-1逐个与a[i]对比,如果a[j]>a[k],就把j值重新赋予k,这个对比过程重复进行n-i次
if(k!=i) //如果发生了对k重新赋值的操作(即找到了比a[i]大的数字),那么k!=i,所以要交换a[i]和a[k]和值,如果k值未变,则说明没有比a[i]大的值,所以此次不进行交换操作,直接进行下一次循环。
{t=a[i];a[i]=a[k];a[k]=t;}//交换a[i]与a[k]的值
}

*********************************************

这并不是冒泡排序,而是选择排序,希望某些网友不要误导别人!谢谢!

这是冒泡排序,演示如下
http://student.zjzk.cn/course_ware/data_structure/web/flashhtml/maopaopaixu.htm