C 使用指针的排序程序

C 使用指针的排序程序,c,pointers,bubble-sort,calloc,C,Pointers,Bubble Sort,Calloc,我有一个计划: 给定一系列数字 按升序排列偶数,然后 按降序排列奇数,然后 将排序后的偶数与排序后的奇数相加到数组中 例如: Input: 1, 2, 3, 4, 5, 6 Expected output: 2, 4, 6, 5, 3, 1 Actual output: 1578032, 0, 3, 6, 6487408, 0 这是我的密码: #include < stdio.h > int main() { input(); } int input()

我有一个计划:

  • 给定一系列数字
  • 按升序排列偶数,然后
  • 按降序排列奇数,然后
  • 将排序后的偶数与排序后的奇数相加到数组中
例如:

Input: 1, 2, 3, 4, 5, 6  
Expected output: 2, 4, 6, 5, 3, 1  
Actual output: 1578032, 0, 3, 6, 6487408, 0   
这是我的密码:

#include < stdio.h >

int main() {
    input();
}
int input() {
    int n;
    printf("Enter The Number Of Elements You Want To Enter : ");
    scanf("%d", & n);
    int * ptr, i, ev = 0, od = 0;
    ptr = (int * ) calloc(n, sizeof(int));
    for (i = 0; i < n; i++) {
        printf("Enter Number : ");
        scanf("%d", (ptr + i));
        if ( * (ptr + i) % 2 == 0) {
            ev++;
        } else {
            od++;
        }
    }

    sorteven( & ptr, ev, od, n);
}
int sorteven(int * ptr, int ev, int od, int n) {
    int i, j = 0, swap = 0, * ptreven;
    ptreven = (int * ) calloc(ev, sizeof(int));
    for (i = 0; i < n; i++) {
        if ( * (ptr + i) % 2 == 0) { *
            (ptreven + j) = * (ptr + i);
            j++;
        }
    }
    for (i = 0; i < ev - 1; i++) {
        for (j = 0; j < ev - i - 1; j++) {
            if ( * (ptreven + j) > * (ptreven + j + 1)) {
                swap = * (ptreven + j); *
                (ptreven + j) = * (ptreven + j + 1); *
                (ptreven + j + 1) = swap;
            }
        }
    }
    sortodd( & ptr, ev, od, n, & ptreven);
}
int sortodd(int * ptr, int ev, int od, int n, int ptreven) {
    int i, k = 0, swap = 0, * ptrodd, j;
    ptrodd = (int * ) calloc(od, sizeof(int));
    for (i = 0; i < n; i++) {
        if ( * (ptr + i) % 2 != 0) { *
            (ptrodd + k) = * (ptr + i);
            k++;
        }
    }
    for (i = 0; i < od - 1; i++) {
        for (j = 0; j < od - i - 1; j++) {
            if ( * (ptrodd + j) < * (ptrodd + j + 1)) {
                swap = * (ptrodd + j); *
                (ptrodd + j) = * (ptrodd + j + 1); *
                (ptrodd + j + 1) = swap;
            }
        }
    }
    merge( & ptr, ev, od, n, & ptreven, & ptrodd);
}
int merge(int * ptr, int ev, int od, int n, int * ptreven, int * ptrodd) {
    int * ptrmerge, i, j;
    ptrmerge = (int * ) calloc(n, sizeof(int));
    for (i = 0; i < ev; i++) { *
        (ptrmerge + i) = * (ptreven + i);
    }
    for (i = ev, j = 0; i < n; i++, j++) { *
        (ptrmerge + i) = * (ptrodd + j);
    }
    display( & ptrmerge, n);
}
int display(int * ptrmerge, int n) {
    int i;
    printf("OUTPUT : ");
    for (i = 0; i < n; i++) {
        printf(" %d ", * (ptrmerge + i));
    }
}
#包括
int main(){
输入();
}
int输入(){
int n;
printf(“输入要输入的元素数:”);
scanf(“%d”和“&n”);
int*ptr,i,ev=0,od=0;
ptr=(int*)calloc(n,sizeof(int));
对于(i=0;i*(ptreven+j+1)){
交换=*(ptreven+j)*
(ptreven+j)=*(ptreven+j+1)*
(ptreven+j+1)=互换;
}
}
}
索托德(和ptr、ev、od、n和ptreven);
}
int sortodd(int*ptr、int ev、int od、int n、int ptreven){
int i,k=0,swap=0,*ptrodd,j;
ptrodd=(int*)calloc(od,sizeof(int));
对于(i=0;i
像这样

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

void input(void);

int main(void){
    input();
}

void sorteven(int *ptr, int n);
void sortodd(int *ptr, int n);
void display(int *ptt, int n);

void input(void){
    int n;
    printf("Enter The Number Of Elements You Want To Enter : ");fflush(stdout);
    scanf("%d", &n);

    int *ptr, i, ev = 0, od = 0;
    if((ptr = calloc(n, sizeof(int)))==NULL){
        perror("malloc");
        exit(EXIT_FAILURE);
    }

    for (i = 0; i < n; i++){
        int v;
        printf("Enter Number : ");fflush(stdout);
        scanf("%d", &v);

        if(v % 2 == 0){
            ptr[ev++] = v;
        } else {
            ptr[n - ++od] = v;
        }
    }

    sorteven(ptr, ev);
    sortodd(ptr + ev, od);
    display(ptr, n);
    free(ptr);
}

void sorteven(int *ptr, int n){
//sort to ascending order
    int i, j, temp;

    for (i = 0; i < n - 1; i++){
        for (j = 0; j < n - i - 1; j++){
            if(ptr[j] > ptr[j + 1]){
                int temp = ptr[j];
                ptr[j] = ptr[j + 1];
                ptr[j + 1] = temp;
            }
        }
    }
}

void sortodd(int *ptr, int n){
//sort to descending order
    int i, j, temp;

    for (i = 0; i < n - 1; i++){
        for (j = 0; j < n - i - 1; j++){
            if(ptr[j] < ptr[j + 1]){
                int temp = ptr[j];
                ptr[j] = ptr[j + 1];
                ptr[j + 1] = temp;
            }
        }
    }
}

void display(int *ptr, int n){
    int i;

    printf("\nOUTPUT : ");
    for (i = 0; i < n; i++){
        if(i)
            putchar(' ');
        printf("%d", ptr[i]);
    }
    putchar('\n');
}
#包括
#包括
作废输入(作废);
内部主(空){
输入();
}
无效分拣机(int*ptr,int n);
void sortodd(int*ptr,int n);
无效显示(int*ptt,int n);
无效输入(无效){
int n;
printf(“输入要输入的元素数:”);fflush(stdout);
scanf(“%d”和“&n”);
int*ptr,i,ev=0,od=0;
if((ptr=calloc(n,sizeof(int)))==NULL){
佩罗尔(“马洛克”);
退出(退出失败);
}
对于(i=0;iptr[j+1]){
内部温度=ptr[j];
ptr[j]=ptr[j+1];
ptr[j+1]=温度;
}
}
}
}
void sortodd(int*ptr,int n){
//按降序排序
int i,j,温度;
对于(i=0;i
sortodd(&ptr,ev,od,n,&ptreven);}int-sortodd(int*ptr,int-ev,int-od,int-n,int-ptreven)
:ptr和ptreven的类型不同<代码>合并(&ptr,ev,od,n,&ptreven,&ptrodd);}int合并(int*ptr、int ev、int od、int n、int*ptreven、int*ptrodd)
:同上。等等。您的程序有多个逻辑和编程问题。e、 g.(ptr+i),ptr是指向整数的指针,i是一个整数,您想如何进行该操作。另外,在编译级别检查警告也不错,它们为您提供了很好的信息。Yo在代码中多次重复此操作。首先修复简单的错误,然后将更正后的代码放在这里,以查找逻辑问题。我认为你的问题在于不理解指针是如何指向的works@BLUEPIXY你能更正代码吗?@SyedHussain你可以使用
qsort
这样做,会使你的代码更短。作为家庭作业,这一点是为了让你学会如何使用编译器等工具来帮助你编写代码。阅读@Eisa给你的建议,并遵循它。一旦您有了编译时没有警告的代码,请寻求人工帮助。或者请求人工帮助修复特定的编译器错误和/或警告。如果你不喜欢这种方法,那么你现在应该停止参加编程课程,因为编程就是这样,你需要习惯它或者停止做它。