【发布时间】:2019-01-18 01:15:08
【问题描述】:
我正在尝试创建随机数据并使用bubble sort algorithm 将它们按升序排序。首先,我创建随机数据,然后将它们传递给具有交换功能的气泡函数。
#include<stdio.h>
#include<stdlib.h>
#define N 5
void swap(int *first, int *second)
{
int *ptr;
ptr = first;
*first = *second;
*second = *ptr;
}
void bubble(int A[], int length) {
int n; /* The number of algorithm passes */
int a;
int b;
int *ptr;
n = length - 1;
for (a=0; a<=n; a++) {
for (b=n; b>a; b--) {
if(A[b-1]>A[b])
{
swap(&A[b-1], &A[b]);
}
}
}
}
void print_int_array(int a[], int length) {
int i;
for (i=0; i<length; i++ )
{
printf("a[%d]=%3d, ",i,a[i]);
}
printf("\n");
}
int main(void) {
int i;
int data[N];
/* Create random data */
for (i=0; i<N; i++) {
data[i] = (int) ((rand()+0.5)/(double) RAND_MAX * 999);
}
print_int_array(data,N); /* Print original random dataset */
bubble(data,N);
printf("Data is now sorted:\n"); /* Print sorted data */
print_int_array(data,N);
return 0;
}
我知道交换函数应该有这个:
void swap(int *first,int *second)
{
int temp = *first;
*first = *second;
*second = temp;
}
但这与我创建的原始交换函数有何不同?
当我使用原始代码运行代码时,我得到了结果:
a[0]= 1, a[1]=563, a[2]=193, a[3]=807, a[4]=584, a[5]=479,
Data is now sorted:
a[0]= 1, a[1]=193, a[2]=193, a[3]=479, a[4]=479, a[5]=479,
第二个数组似乎没有显示它已经排序。问题出现在交换函数中,由于某种原因,最后几个元素具有相同的值并且没有被交换。
【问题讨论】:
-
您首先将指针分配给 ptr,然后更改地址处的值,首先指向的地址。但是, ptr 也指向该内存。你没有交换任何东西。
-
您所说的另一个交换将值存储在内存中,第一个指向的内存是临时的,而不是指针
-
这也可以:*first = *first ^ *second; *第二 = *第一 ^ *第二; *first = *first ^ *second;
标签: c pointers memory-address