C语言排序问题
2014-05-07 09:55
148 查看
先前对C语言有一定的的入门知识,但是由于没有深入学习,就一直停留在了这个水平。如今有时间了,重操旧业,开始“吃剩饭”,重新学习C语言 了。听大牛们都说,要真正的学懂某些东西,不是自己看明白了就可以了,最好的学习方法是把自己明白的讲出来,讲给别人,让被人也理解了,这才是真正的掌握了。我也就自己开了博客,来把自己学到的总结,记录下来。。。。。。
先来看看优先排序的示例:
蓝色标注的为此排序函数的关键部分,我们可以将数组看成是指针常量。
通过含有指针的函数,将这个程序改写为指针的形式后如下。
下面是使用指针实现的冒泡排序的程序。
正文
相信了解过C语言的都知道,指针是C语言学习中最重点的一部分,同时如果它不是最难的知识点的话,也是最难理解的知识点之一。下面我通过自己对优先排序和冒泡排序的理解,来说明自己对指针的理解。先来看看优先排序的示例:
//优先排序算法,在主函数中实现排序 #include<stdio.h> int main() { int a[10]; int n , i , j; int index , temp; //输入要输入排序的数字个数 printf("Enter n:"); scanf("%d" , &n); //输入要排序的数,读入到数组a[10]中 printf("Enter %d numbers:" , n); for(i = 0;i < n;i ++) { scanf("%d" , &a[i]); } /***********优先排序,从小到大排列********************************** *大循环执行n-1次,小循环每次从大循环加1后开始执行 *每次执行一个小循环,将大循环初始的下标换做这一轮最小的数对应的下表 */ for(i = 0;i < (n - 1);i ++) { index = i; for(j = (i + 1) ;j < n;j ++) { //找出每一轮排序时最小的数对应的下表 if(a[j] < a[index]) { index = j; } } //交换这一轮比较中的起始数与最小数 temp = a[index]; a[index] = a[i]; a[i] = temp; } //输出排序后的数组值 for(i = 0;i < n;i ++) { printf("%3d" , a[i]); } printf("\n"); return 0; }
蓝色标注的为此排序函数的关键部分,我们可以将数组看成是指针常量。
通过含有指针的函数,将这个程序改写为指针的形式后如下。
//优先排序算法 #include<stdio.h> void priority_sort(int * , int ); int main() { int a[10]; int n , i; //输入要输入排序的数字个数 printf("Enter n:"); scanf("%d" , &n); //输入要排序的数,读入到数组a[10]中 printf("Enter %d numbers:" , n); for(i = 0;i < n;i ++) { scanf("%d" , &a[i]); } priority_sort(a , n); //输出排序后的数组值 for(i = 0;i < n;i ++) { printf("%3d" , a[i]); } printf("\n"); return 0; } void priority_sort(int a[] , int n) { int i , j , index; int temp; /***********优先排序,从小到大排列********************************** *大循环执行n-1次,小循环每次从大循环加1后开始执行 *每次执行一个小循环,将大循环初始的下标换做这一轮最小的数对应的下表 */ for(i = 0;i < (n - 1);i ++) { index = i; for(j = (i + 1) ;j < n;j ++) { //找出每一轮排序时最小的数对应的下表 if(a[j] < a[index]) { index = j; } } //交换这一轮比较中的起始数与最小数 temp = a[index]; a[index] = a[i]; a[i] = temp; } }写到这里,我自己就比较明白了。根据课本上说的,要想实现函数返回多个值,必须要用到指针。那么怎样才能够用指针实现调用的函数返回需要的值呢?其实,直白的说就是在调用函数时,使用该变量的地址,而在函数中,我们就是操作这个地址对应的形参的内容,这样就可以实现主函数变量的值的改变了。
下面是使用指针实现的冒泡排序的程序。
#include<stdio.h> void maopao_sort(int * , int ); int main() { int a[10]; int n , i; printf("Enter n:"); scanf("%d" , &n); printf("Enter %d numbers:" , n); for(i = 0;i < n;i ++) { scanf("%d" , &a[i]); } maopao_sort(a , n); for(i = 0;i < n;i ++) { printf("%3d" , a[i]); } printf("\n"); return 0; } void maopao_sort(int *p , int n) { int i , j; int t; for(i = 1;i < n;i ++) { for(j = 0;j < (n - i);j ++) { if((*(p+j)) > (*(p+j+1))) { t = *(p+j+1); *(p+j+1) = *(p+j); *(p+j) = t; } } } }
相关文章推荐
- 顺序表实现之C语言(附加各种顺序表排序问题)
- C语言 - 选择排序中的--异或交换--问题分析
- C语言中关于排序问题(一冒泡排序)
- C语言 1.排序问题
- 【C语言训练】排序问题<1>
- 双链表排序问题(C语言)
- 【C语言训练】排序问题<2>
- c语言字符串排序问题
- 山东理工大学ACM平台题答案关于C语言 1196 排序问题
- 一次C语言实现字符排序出现的问题
- 使用C语言中qsort()函数对浮点型数组无法成功排序的问题
- 第十六周—C语言 字符串排序问题
- 关于C语言数组利用指针排序的问题
- 问题 G: 【C语言训练】排序问题<1>
- 关于把二元查找树转变成排序的双向链表(树)的C语言设计程序执行后出现段错误的问题
- C语言将数组中元素的数排序输出的相关问题解决
- [C语言]排序问题
- 【C语言】getchar函数 以及ASCII码排序问题
- C语言及程序设计进阶例程-25 排序问题及其求解
- C语言排序(13)___众数问题(Hdu 1029)