麻烦使用指针在C中排序数组

时间:2014-03-24 23:39:15

标签: c arrays

我正在上课的课程。我们正在使用指针。我们必须生成一个数组,其中元素的数量由用户确定(使用malloc)。我把那部分都搞定了。其次,我们必须按降序对数组进行排序。我不知道为什么我不能让这个工作。这段代码翻转了整个数组,因此3 4 5 12 5变为5 12 5 4 3,但这不是我想要的。我确定它有点小,但对于我的生活,我无法弄清楚我做错了什么。

void main()
{
    int *p, *sizearray, *q;
    int i, siz;
    printf("How large do you want the array? Enter a number between 0 and 50\n");
    scanf("%d", &siz);
    if (siz <= 50)
    {
        p = genarr(siz);
        for (i = 0; i <siz; i++)
            printf("%i\n", *(p + i));

        arrsort(p,siz);

        for (i = 0; i <siz; i++)
            printf("%i\n", *(p + i));
    }
    else
        printf("That number was not in the given range");

    while(1);
}




#include "stdafx.h"
#include <time.h>           // required for the time_t structure
#include <stdlib.h>         // Reqwuired for the srand() and rand() functions
#include "ArrEdit.h"

int* genarr(int size)
{
    time_t t;
    int i, m;
    int *sizearr;

    sizearr = (int*)malloc(sizeof(int)*size);
    srand((unsigned)time(&t));

    for (i = 0; i<size; i++)
        *(sizearr + i) = rand() % 50;

    return sizearr;
    free(sizearr);
}


int *arrsort(int*prt, int si)
{
    int k, j;
    int temp;   // holding variable
    for (k = 0; k< (si - 1); k++)    // element to be compared
    for (j = (k + 1); j < si; j++)   // rest of the elements
    {

        swap(&prt[k], &prt[j]);
    }
    return prt;
}

void swap(int *s, int *r)
{
        int pSwap = *r;
        *r = *s;
        *s = pSwap;

}

1 个答案:

答案 0 :(得分:1)

for (j = (k + 1); j < si; j++)   // rest of the elements
{

    swap(&prt[k], &prt[j]);
}

如果k> 1,这应该只交换j,所以你需要一个if语句:

for (j = (k + 1); j < si; j++)   // rest of the elements
{
    if (prt[k] > prt[j])
        swap(&prt[k], &prt[j]);
}