C语言使用指针实现选择法和冒泡法对数字排序

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环境下写的,毕竟放完假来学校啥也不记得了。
每天给自己点一个赞!
希望能给你带来一些帮助。

猜你喜欢

转载自blog.csdn.net/m0_51465487/article/details/115253613