c语言的排序函数有多少种 c语言排序总结( 三 )


3、数组
如果一个变量名后面跟着一个有数字的中括号 , 这个声明就是数组声明 。字符串也是一种数组 。它们以ASCII的NULL作为数组的结束 。要特别注意的是,方括内的索引值是从0算起的 。
4、指针
如果一个变量声明时在前面使用 * 号,表明这是个指针型变量 。换句话说,该变量存储一个地址,而 *(此处特指单目运算符 * ,下同 。C语言中另有 双目运算符 *) 则是取内容操作符,意思是取这个内存地址里存储的内容 。指针是 C 语言区别于其他同时代高级语言的主要特征之一 。
参考资料来源:百度百科-函数
C语言实现七种排序算法的演示代码是什么?(1)“冒泡法” \x0d\x0a\x0d\x0a冒泡法大家都较熟悉 。其原理为从a[0]开始c语言的排序函数有多少种,依次将其和后面的元素比较,若a[0]a[i],则交换它们,一直比较到a[n] 。同理对a[1],a[2],...a[n-1]处理,即完成排序 。下面列出其代码:\x0d\x0a\x0d\x0avoid bubble(int *a,int n) /*定义两个参数:数组首地址与数组大小*/ \x0d\x0a\x0d\x0a{ \x0d\x0a\x0d\x0aint i,j,temp; \x0d\x0a\x0d\x0afor(i=0;ia[j]) { \x0d\x0a\x0d\x0atemp=a[i]; \x0d\x0a\x0d\x0aa[i]=a[j]; \x0d\x0a\x0d\x0aa[j]=temp; \x0d\x0a\x0d\x0a} \x0d\x0a\x0d\x0a} \x0d\x0a\x0d\x0a冒泡法原理简单,但其缺点是交换次数多,效率低 。\x0d\x0a\x0d\x0a下面介绍一种源自冒泡法但更有效率的方法“选择法” 。\x0d\x0a\x0d\x0a(2)“选择法” \x0d\x0a\x0d\x0a选择法循环过程与冒泡法一致 , 它还定义c语言的排序函数有多少种了记号k=i,然后依次把a[k]同后面元素比较,若a[k]a[j],则使k=j.最后看看k=i是否还成立,不成立则交换a[k],a[i],这样就比冒泡法省下许多无用的交换,提高了效率 。\x0d\x0a\x0d\x0avoid choise(int *a,int n) \x0d\x0a\x0d\x0a{ \x0d\x0a\x0d\x0aint i,j,k,temp; \x0d\x0a\x0d\x0afor(i=0;ia[j]) k=j; /*是k总是指向最小元素*/ \x0d\x0a\x0d\x0aif(i!=k) { /*当k!=i是才交换,否则a[i]即为最小*/ \x0d\x0a\x0d\x0atemp=a[i]; \x0d\x0a\x0d\x0aa[i]=a[k]; \x0d\x0a\x0d\x0aa[k]=temp; \x0d\x0a\x0d\x0a} \x0d\x0a\x0d\x0a} \x0d\x0a\x0d\x0a} \x0d\x0a\x0d\x0a选择法比冒泡法效率更高,但说到高效率,非“快速法”莫属 , 现在就让我们来了解它 。\x0d\x0a\x0d\x0a(3)“快速法” \x0d\x0a\x0d\x0a快速法定义了三个参数,(数组首地址*a,要排序数组起始元素下标i,要排序数组结束元素下标j). 它首先选一个数组元素(一般为a[(i+j)/2],即中间元素)作为参照,把比它小的元素放到它的左边 , 比它大的放在右边 。然后运用递归,在将它左 , 右两个子数组排序,最后完成整个数组的排序 。下面分析其代码:\x0d\x0a\x0d\x0avoid quick(int *a,int i,int j) \x0d\x0a\x0d\x0a{ \x0d\x0a\x0d\x0aint m,n,temp; \x0d\x0a\x0d\x0aint k; \x0d\x0a\x0d\x0am=i; \x0d\x0a\x0d\x0an=j; \x0d\x0a\x0d\x0ak=a[(i+j)/2]; /*选取的参照*/ \x0d\x0a\x0d\x0ado { \x0d\x0a\x0d\x0awhile(a[m]kni) n--; /* 从右到左找比k小的元素*/ \x0d\x0a\x0d\x0aif(mi) quick(a,i,n); \x0d\x0a\x0d\x0a} \x0d\x0a\x0d\x0a(4)“插入法” \x0d\x0a\x0d\x0a插入法是一种比较直观的排序方法 。它首先把数组头两个元素排好序,再依次把后面的元素插入适当的位置 。把数组元素插完也就完成了排序 。\x0d\x0a\x0d\x0avoid insert(int *a,int n) \x0d\x0a\x0d\x0a{ \x0d\x0a\x0d\x0aint i,j,temp; \x0d\x0a\x0d\x0afor(i=1;i=0temp=1)的那几个元素排好序,再缩小k值(一般取其一半),再排序,直到k=1时完成排序 。下面让我们来分析其代码:\x0d\x0a\x0d\x0avoid shell(int *a,int n) \x0d\x0a\x0d\x0a{ \x0d\x0a\x0d\x0aint i,j,k,x; \x0d\x0a\x0d\x0ak=n/2; /*间距值*/ \x0d\x0a\x0d\x0awhile(k=1) { \x0d\x0a\x0d\x0afor(i=k;i=0x \x0d\x0a\x0d\x0a/*别偷懒,下面的"..."代表函数体,自己加上去哦c语言的排序函数有多少种!*/ \x0d\x0a\x0d\x0avoid bubble(int *a,int n) \x0d\x0a\x0d\x0a{ \x0d\x0a\x0d\x0a... \x0d\x0a\x0d\x0a} \x0d\x0a\x0d\x0avoid choise(int *a,int n) \x0d\x0a\x0d\x0a{ \x0d\x0a\x0d\x0a... \x0d\x0a\x0d\x0a} \x0d\x0a\x0d\x0avoid quick(int *a,int i,int j) \x0d\x0a\x0d\x0a{ \x0d\x0a\x0d\x0a... \x0d\x0a\x0d\x0a} \x0d\x0a\x0d\x0avoid insert(int *a,int n) \x0d\x0a\x0d\x0a{ \x0d\x0a\x0d\x0a... \x0d\x0a\x0d\x0a} \x0d\x0a\x0d\x0avoid shell(int *a,int n) \x0d\x0a\x0d\x0a{ \x0d\x0a\x0d\x0a... \x0d\x0a\x0d\x0a} \x0d\x0a\x0d\x0a/*为了打印方便,我们写一个print吧 。*/[code]\x0d\x0a\x0d\x0avoid print(int *a,int n) \x0d\x0a\x0d\x0a{ \x0d\x0a\x0d\x0aint i; \x0d\x0a\x0d\x0afor(i=0;i

推荐阅读