用于排序3个随机数的C程序,void reorder3(int a,int * b,int ** c);

时间:2011-11-08 08:37:20

标签: c sorting pointers random

此代码正在运行但不完全符合我的要求。有没有人知道如何使它正确,没有q排序?想法是了解如何使用指针。 这三个数字应该是-3到12之间的随机数。下面的代码类似,我发现的最接近。任何帮助将非常感激。提前致谢!!。

#include <stdio.h>
#include <stdlib.h>

//functions
int compare(const void *a, const void *b)
{
   const int *ia = a;
   const int *ib = b;

   if (*ia < *ib)
      return -1;
   else if (*ia > *ib)
      return +1;

   return 0;
}

//qsort function
void sort3(int *a, int *b, int *c)
{
   int temp[3];

   temp[0] = *a;
   temp[1] = *b;
   temp[2] = *c;

   qsort(temp, 3, sizeof(int), &compare);

   *a = temp[0];
   *b = temp[1];
   *c = temp[2];
}

//random function
int rand_int(int a, int b)
{
return rand()%(b-a+1)+a;
}

int main(void)
{

   //declaration of variables
   int a,b,c;
   int rand_int(int a, int b);
   srand(time(0));  
   a = rand_int(-3,12);
   b = rand_int(-3,12);
   c = rand_int(-3,12);

   printf("%i %i %i\n", a, b, c);
   sort3(&a, &b, &c);
   printf("%i %i %i\n", a, b, c);

   return 0;
}

2 个答案:

答案 0 :(得分:7)

如果您不想使用compare(),则不需要qsort()功能。

您可以像这样重写sort3()

void compare_and_swap(int *a, int *b) {
    int t;
    if (*a > *b) {
        t = *a;
        *a = *b;
        *b = t;
    }
}

void sort3(int *a, int *b, int *c) {
    compare_and_swap(a, b);
    compare_and_swap(a, c);
    compare_and_swap(b, c);
}

这实际上是一个“bubble sort”。

答案 1 :(得分:0)

要排序3个整数,这是一个很大的麻烦。使用if语句。

如果目标实际上是理解指针,它们似乎令人生畏,但它们并不是那么糟糕。基本上,它们是恰好是地址的数字。您可以像操作数字一样进行操作,但如果您取消引用它们(使用*),则可以在那里获取值。但这会削减两种方式,因为没有太多阻止你取消引用一个值 - 这可能会使你的程序崩溃(或者更可怕,也许不会)。

只要你记住地址和价值是什么,你应该没问题。