当前位置: 首页 > 知识库问答 >
问题:

C中的指针数组排序有意外的输出

颛孙镜
2023-03-14
#include <stdio.h>

void sort(int *ptr, int n) {
    int i,j,tmp;
    for (i=0;i<n;i++)
        for (j=0;j<n;j++)
                if (ptr[i] < ptr[j])
                {
                    tmp=ptr[i];
                    ptr[i]=ptr[j];
                    ptr[j]=tmp;
                }
}
int main() {
    int i,n;
    int *ptr;
    printf("Nr. of elements : 5 \n");
    n=5;

    ptr=(int*)malloc( n * sizeof(int));
    for (i=0;i<n;i++) {
        scanf("%d",&ptr[i]);
    }

    printf("Initial array is : ");
    for (i=0;i<n;i++) {
        printf("%d ",ptr[i]);
    }

    sort(ptr,n);

    printf("Sorted array is : ");
    for (i=0;i<n;i++) {
        printf("%d ",ptr[i]);
    }
    return 0;
}

这是我的密码。我正在尝试使用函数对指针数组进行排序。无论(int)输入是什么,它都能很好地处理。我感到困惑的是,我使用的是ptr[i] 而不是 ptr[i]>ptr[j]来升序排序。为什么会这样?


共有1个答案

慕逸仙
2023-03-14

正如我们所看到的,您使用的是冒泡排序。在气泡排序中,我们的主要目的是将较重的元素转移到末端,或将较轻的元素转移到顶部。

(PTR[i]

你所做的是将重元素移动到数组的末尾,这就是为什么每当你发现PTR[j](j是一个内循环变量)比PTR[i](外循环变量)大时,你就在做交换。

 类似资料:
  • C++ 数组 您可以先跳过本章,等了解了 C++ 指针的概念之后,再来学习本章的内容。 如果您对 C++ 指针的概念有所了解,那么就可以开始本章的学习。数组名是一个指向数组中第一个元素的常量指针。因此,在下面的声明中: double balance[50]; balance 是一个指向 &balance[0] 的指针,即数组 balance 的第一个元素的地址。因此,下面的程序片段把 p 赋值

  • C++ 指针 在我们讲解指针数组的概念之前,先让我们来看一个实例,它用到了一个由 3 个整数组成的数组:#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; for (int i = 0; i < MAX; i++) { cout << "Va

  • 主要内容:关于数组指针的谜题数组(Array)是一系列具有相同类型的数据的集合,每一份数据叫做一个数组元素(Element)。数组中的所有元素在内存中是连续排列的,整个数组占用的是一块内存。以 为例,该数组在内存中的分布如下图所示: 定义数组时,要给出数组名和数组长度,数组名可以认为是一个 指针,它指向数组的第 0 个元素。 在C语言中,我们将第 0 个元素的地址称为数组的首地址。以上面的数组为例,下图是 arr 的指向:

  • 在print语句中:(假设整数大小为4字节) 让arr的内存位置为1000 arr 1——给出1016(即下一行内存) 我理解了逻辑,但我无法理解编译器如何将 arr标识为“指向4整数数组的指针”,并且 即使在增量之前两者都指向相同的地址(1000)

  • 本文向大家介绍指针数组、数组指针、函数指针的区别?相关面试题,主要包含被问及指针数组、数组指针、函数指针的区别?时的应答技巧和注意事项,需要的朋友参考一下 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身的大小决定,每一个元素都是一个指针,在32 位系统下任何类型的指针永远是占4 个字节。它是“储存指针的数组”的简称。 数组指针:首先它是一个指针,它指向一个数组。在32

  • 我刚开始学习C,所以这可能是一个愚蠢的问题,但它是这样的: 我试着这样做: 但不管用,我也想不出原因。 那为什么这不起作用呢?我怎么做这张支票? 大THX!