Chinaunix首页 | 论坛 | 博客
  • 博客访问: 124604
  • 博文数量: 52
  • 博客积分: 2200
  • 博客等级: 大尉
  • 技术积分: 580
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-08 15:00
文章分类

全部博文(52)

文章存档

2011年(1)

2009年(51)

我的朋友

分类: C/C++

2009-11-10 11:50:55

/*=============================================================
              目的:用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数
               
             算法分析:1、 定义整数数组,定义指针数组并将整数数组元素地址赋值给指针数组
                       2、定义指向指针的数组,将指针数组的首地址赋值给该指针
                       3、 定义排序函数,函数参数为指向指针的指针 ,返回排序后的指向指针的指针
                       4、主函数中输出排序后的整数
==============================================================
              作者:最后的村长
              时间:2009年10月12日
              工具:DEV C++ 4.9.9.2
              version:1.0
==============================================================*/

#include <stdio.h>
#include <stdlib.h>
void sort(int **pointer,int n);//声明排序函数

/*=============================================================*/
int main()
{
    unsigned n;//定义数组维数

    puts("请输入整数数组元素的个数:\n");
    scanf("%u",&n);//对数组维数初始化

    int a[n];//定义整数数组

    int *p[n];//定义指针数组

    printf("\n请输入%d个整数",n);
    //对整数数组初始化,将整数数组的元素地址赋值给指针数组

    for(int i=0;i<n;i++)
    {
            printf("\na[%d]=",i);
            scanf("%d",a+i);
            p[i]=a+i;
    }
    //输出排序前的指针数组的值(实际上是整数数组元素的地址)

    puts("未排序前指针数组的值:");
    for(int i=0;i<n;i++)
    {
            printf("\np[%d]=%d",i,p[i]);
            }
            
    //定义指向指针的指针

    int **pointer;
    //将指针数组的首地址赋值给指向指针的指针

    pointer=p;
    //调用排序函数

   sort(pointer,n);
   //输出排序后的指针数组的值,看以看出整数数组本身没有发生变化,只是指针数组的值改变了

   puts("排序后的指针数组的值:");
    for(int i=0;i<n;i++)
    {
            printf("\np[%d]=%d",i,p[i]);
            }
            
   puts("\n排序后的整数数组为:\n");
   //输出排序后的整数数组的值

   for(int i=0;i<n;i++)
   {
           printf("\n第%d个元素为:%d",i+1,**(pointer+i));
   }
   

 
    system("PAUSE");
    return 0;
}
//排序函数,实现对整数数组的排序,以指向指针的指针作为函数变量

//因为直接对指针数组进行了操作,所以无需返回值就可以实现对整数的排序,实际上是调换的

//指针数组的值

void sort(int **pointer,int n)
{
     //定义中转变量

    int *temp;
    //冒泡法排序

    for(int i=0;i<(n-1);i++)
    {
            for(int j=i+1;j<n;j++)
            {
                    if(**(pointer+i)<**(pointer+j))
                    {temp=*(pointer+i);*(pointer+i)=*(pointer+j);*(pointer+j)=temp;}
            }
    }
}


阅读(14005) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~