我正在尝试创建随机数据,并使用bubble sort algorithm将它们按升序排序。首先,我要创建随机数据,然后将它们传递到冒泡函数中,然后该泡沫函数具有交换功能。
import C1
class C2():
C2_a = 1
C2_b = 2
C1_sample = C1_class.C1()
C2_sample = C2()
print(C2_sample.C1_sample.test_func)
我知道交换功能应改为:
#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;
}
第二个数组似乎并不表明它已被整理。该问题出现在交换函数中,由于某种原因,最后几个元素具有相同的值并且未被交换。
答案 0 :(得分:0)
在原始交换函数中,您要覆盖first
指向的数据。将指针保存在另一个变量中不会在任何地方保存原始数据。因此,当您这样做
*second = *ptr;
ptr
指向first
所指向的内存,因此这与
*second = *first;
由于您已从上一行的*second
复制到*first
,因此只需将其复制回*second
。最终结果是两个位置都包含最初包含的*second*
。
答案 1 :(得分:0)
原因是,当您更改*first
时,也会更改*ptr
。
void swap(int *first, int *second)
{
int *ptr; // say that *first is 2 and *second is 1
ptr = first; // ptr points to the same memory as first
*first = *second; // now *first and *ptr is 1
*second = *ptr; // *second doesn't change as intended, and is still 1
}