C语言使用指针实现选择法和冒泡法对数字排序
前言
刚学到指针章节,遇到的习题大多是将以前写过的代码用指针的方法再写一次,不过说实话,很多写起来并不是我想像的那简单,而且觉得没啥必要,但是据说到链表指针作用很大,所以希望大家将指针重视起来,把这个分享出来大家可以看看。
选择法排序
//选择算法
//指针选择法排序
#include<stdio.h>
main(){
int a[10],i,j,*p; //变量全部初始化
printf("please input ten nums devise keyboard!\n");
p=a;
for(i=0;i<10;i++){
//从键盘输入数组元素
scanf("%d",&*(p++));
}
p=a; //核心部分选择法排序
for(i=0;i<10-1;i++){
//执行N-1次(第一个与下一个换,最后一个不用换)
int min = i; //这个min记录的i,就是将第i个与全数组比较调换
for(j=i+1;j<10;j++){
//j=i+1;会从还没排好的地方开始
if(*(p+j)<*(p+min)){
//逐一比较找出目标值
min = j;
}
}
if(min!=i){
//如果目标值不是当前值就开始调换
int temp;
temp = *(p+i);
*(p+i) = *(p+min);
*(p+min) = temp;
}
}
p=a;//打印排序完成后的数组元素
for(i=0;i<10;i++){
printf("%d ",*(p++));
}
printf("\n");
}
冒泡法排序
//冒泡法 mine 非函数
#include<stdio.h>
main(){
int a[1000]; //划定一个最大的数组长度
int *p,n,i,j;
printf("请输入数组的长度:");
scanf("%d",&n);
printf("请输入数组各元素:\n");
p=a; //开始从键盘接收数组元素
for(i=0;i<n;i++){
scanf("%d",&*(p++));
}
p=a; //冒泡法核心
for(i=0;i<n-1;i++){
//也是一样的两两一比,最后一个不需要
for(j=0;j<n-1-i;j++){
//j用来记录比较次数,仅比较未达标的
if(*(p+j)>*(p+j+1)){
int temp;
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
p=a;
for(i=0;i<n;i++){
printf("%d ",*(p++));
}
}
全部到这儿也差不多,这个主要是写给和我一样的新入门者看的,还没有学习函数,我们写的代码都是在c环境下写的,毕竟放完假来学校啥也不记得了。
每天给自己点一个赞!
希望能给你带来一些帮助。