前言
因为自己上几篇的博客都是牵扯到指针的,所以自己就有必要去真正理解指针的作用,在刚开始学C指针时,觉得指针这东西没点用,因为自己写的什么算法都不必去用指针。那又何必学习指针呢?就这样自己带着如此思想去学习链表,发现自己在那个时候就已经犯错了。接触链表的时候让我感觉指针的强大。让我深深的爱上了指针这玩意儿。今天,我就在这里将C语言中冒泡/选择/比较算法以指针的形式进行完成。
冒泡算法
//指针冒泡排序
#include
const int N=100; //数组最大长度
int a[N];
void swap(int *p1,int *p2){ //一个将两数交换的函数
int temp=*p1;
*p1=*p2;
*p2=temp;
}
int main(){
int *p,n;
printf("请输入数组的长度:");
scanf("%d",&n);
printf("请输入数组各元素:\n");
p=a; //将指针指向数组的第一个元素
for(int i=0;i*(p+j+1)){
swap(p+j,p+j+1);
}
}
}
p=a;
for(int i=0;i
上面的代码还是还原了冒泡排序算法的模样,但是又比传统的算法多了指针这个强大的东西,我想这是对你运用指针的一个好方法、
选择算法
//指针选择法排序
#include
const int N=10;
int a[N];
int swap(int *p1,int *p2){
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
return 0;
}
int sqrt(int *p){ //算法核心代码
for(int i=0;i
我想在冒泡排序的基础上去理解这一段代码应该是没问题的吧。它的变化就是定义了一个排序函数。
比较算法
//指针比较排序
#include
const int N=1000;
int a[N];
void swap(int *p1,int *p2){
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
int main(){
int *p,n;
printf("请输入数组的长度: ");
scanf("%d",&n);
p=a;
for(int i=0;i*(p+j)){
swap(p+i,p+j);
}
}
}
p=a;
for(int i=0;i
我相信在上面两段代码的基础上理解这一算法代码已经不成问题。可以说换汤不换药吧。算法核心不一样,但指针的用法却是相似的。
我相信你已经理解了,还有什么疑问的或者指针可以评论。多多支持哦。