我有一个表示数据库Vector *vec_date_present
中项的位置的向量(已排序)以及一个双vec_dates_time
数组,我想用冒泡排序算法对vec_dates_time
进行排序,同时保留相应的位置项,最终将生成以下输出:
Sorted:
4: 0.1
1: 0.2
0: 2.3
3: 1.2
2: 5.8
5: 9.2
但我得到了一个分割错误。
我怎样才能解决这个问题呢?
下面是源代码:
#include <stdio.h>
#include <stdlib.h>
#define VECSIZE 6
typedef struct {
size_t size_array;
size_t *array;
} Vector ;
void swap_vector(double* date1, double* date2, size_t** idx1, size_t** idx2)
{
double dtemp = *date1;
*date1 = *date2;
*date2 = dtemp;
size_t *utemp = *idx1;
**idx1 = **idx2;
**idx2 = *utemp;
}
void bubble_sort_date(Vector *vec_date_present, double *vec_dates_time)
{
int i, j;
for (i = 0; i < vec_date_present->size_array - 1; i++)
// Last i elements are already in place
for (j = 0; j < vec_date_present->size_array - i - 1; j++)
if (vec_dates_time[j] > vec_dates_time[j+1])
swap_vector(&vec_dates_time[j], &vec_dates_time[j+1], &vec_date_present[j].array, &vec_date_present[j+1].array);
}
int main()
{
Vector *vec_date_present = (Vector *) malloc(sizeof(Vector));
vec_date_present->array = (size_t *) malloc(VECSIZE * sizeof(size_t));
vec_date_present->size_array = 0;
double *vec_dates_time = (double *) malloc(VECSIZE*sizeof(double));
size_t i;
for (i= 0; i<VECSIZE; i++)
{
vec_date_present->array[i] = i;
}
vec_dates_time[0] = 2.3;
vec_dates_time[1] = 0.2;
vec_dates_time[2] = 5.8;
vec_dates_time[3] = 1.2;
vec_dates_time[4] = 0.1;
vec_dates_time[5] = 9.2;
printf("Non sorted:\n");
for (i= 0; i<VECSIZE; i++)
{
printf("%zu: %.1f\n", vec_date_present->array[i], vec_dates_time[i]);
}
bubble_sort_date(vec_date_present, vec_dates_time);
printf("Sorted:\n");
for (i= 0; i<VECSIZE; i++)
{
printf("%zu: %1.f\n", vec_date_present->array[i], vec_dates_time[i]);
}
free(vec_date_present->array);
free(vec_date_present);
free(vec_dates_time);
return 0;
}
1条答案
按热度按时间tf7tbtn21#
看来你是说
函数交换看起来像
你还应该写
代替