Я пытаюсь создать случайные данные и отсортировать их в порядке возрастания, используя алгоритм пузырьковой сортировки . Сначала я создаю случайные данные, а затем передаю их в функцию пузыря, которая затем имеет функцию обмена.
#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,
Второй массив, похоже, не показывает, что он отсортирован. Проблема возникает в функции подкачки, и по некоторым причинам последние несколько элементов имеют одинаковое значение и не были поменяны местами.