使用指针按升序排序

时间:2015-12-12 13:48:46

标签: c sorting pointers

我正在编写一个程序,使用指针按升序对3个整数进行排序,我编写了以下代码:

#include <stdio.h>
void compare_and_swap(int *const a, int *const b) {
    int t;

    if (*a > *b) {
        t = *a;
        *a = *b;
        *b = t;
     }

void  sort (int * const pint1, int * const pint2, int *const pint3)
    {
       if (*pint1 > *pint2){compare_and_swap(pint1, pint2);}
       if (*pint2 > *pint3){compare_and_swap(pint2, pint3);}
       if (*pint1 > *pint3){compare_and_swap(pint1, pint3);}
     }

int main (void)
    {
         void  sort (int * const pint1, int *  const pint2, int * pint3);
         int   i1 = -5, i2 = 66, i3 =77, *p1 = &i1, *p2 = &i2, *p3 = &i3;
         int x;
         printf ("i1 = %i, i2 = %i, i3=%i \n", i1, i2,i3);

         sort (p1, p2,p3);
         printf ("i1 = %i, i2 = %i, i3= %i \n", x);

         return 0;
    }

我得到的输出是一些垃圾值:

i1 = -5, i2 = 66, i3=77 
i1 = 0, i2 = 1427618548, i3= -5 

1 个答案:

答案 0 :(得分:2)

您正在将一个参数传递给printf(),其中有三个参数。启用编译警告,以便编译器可以告诉您这一点。

printf ("i1 = %i, i2 = %i, i3= %i \n", x);

将其更改为

printf ("i1 = %i, i2 = %i, i3= %i \n",i1,i2,i3);

应该有用。

还阅读一些关于最着名和最基本的排序算法之一[https://en.wikipedia.org/wiki/Bubble_sort] [1],因为您没有按降序给出给定数字的正确结果