在打印之前对C中的整数列表进行排序

时间:2016-01-28 08:54:07

标签: c arrays sorting

我需要按排序顺序打印我的最终数组元素 我已经制作了一组三个元素,我找到了该组中最大的元素。我需要按排序顺序显示列表。

这是我的代码的相关部分:

#define MAX 9
void display(); //Display the element of array
int array[MAX]; //Array for Storing MAX element

//Function for displaying  elements
void display()
{
    int read_counter;
    for(read_counter = 0; read_counter < MAX; read_counter++)
    {
        printf("\n Elements are %d\t",array[read_counter]);
    }
}

如何排序和打印array的元素?

2 个答案:

答案 0 :(得分:3)

您可以qsort使用compare功能:

int compare (const void * a, const void * b)
{
  return ( *(int*)a - *(int*)b );
}

然后在打印前使用它对数组进行排序:

qsort (array, 3, sizeof(int), compare);

如果您正在处理非常大的非常小的号码而且害怕出现溢出情况,请改用此compare方法:

int compare(const void* a, const void* b)
{
  int va = *(const int*) a;
  int vb = *(const int*) b;
  return (va > vb) - (va < vb);
}

答案 1 :(得分:0)

您需要对数组进行排序,然后再显示它。

如果您不希望更改实际数组,可以将排序后的数组保存在中间临时数组中。

做类似的事情:

#define MAX 9
void display(); //Display the element of array
int array[MAX]; //Array for Storing MAX element

//Function for displaying  elements
void display()
{
 int min,i,j,tempArray[MAX],temp;

 //copy into temporary array
 for(i=0;i<MAX;i++)
  tempArray[i] = array[i];

 //sort temporary array (basic selection sort)
 for(i=0;i<MAX-1;i++)
 {
  min = i;
  for(j=i+1;j<MAX;j++)
  {
   if(tempArray[min] > tempArray[j] )
   {
    min = j;
   }
    //swap min with current if current is not already min
    if(i != min)
    {
     temp = tempArray[i];
     tempArray[i] = tempArray[min];
     tempArray[min] = temp;
    }
  }
 }
    int read_counter;
    for(read_counter = 0; read_counter < MAX; read_counter++)
    {
        printf("\n Elements are %d\t",tempArray[read_counter]);
    }
}