01/10/2018, 12:34
Giúp mình tìm lỗi bài toán sắp xếp dùng Quicksort này với
Mình đang làm 1 bài tập sắp xếp dãy đơn giản, gồm có 3 phần: Sắp xếp theo thứ tự tăng dần, thứ tự giảm dần và thứ tự tăng dần trị tuyệt đối. 2 phần đầu thì không có vấn đề gì nhưng ở phần 3 mình có dùng con trỏ và bị lỗi mà không hiểu vì sao, mong mọi người chỉ ra lỗi giúp mình với, mình xin cảm ơn nhiều.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SWAP(type, a, b) {type temp = a; a = b; b = temp;}
#define FOR(i, a, b) for (i = a; i < b; ++i)
void QuickSort(float *, int, int);
void QuickSort2(float **, int, int);
int main(void)
{
float arr[10];
float* arr_t[10];
float arr2[10][2];
int n, i;
do {
printf("n = ");
scanf("%d", &n);
} while (n <= 0 || n > 10);
for (i = 0; i < n; ++i) {
printf("arr[%d] = ", i);
scanf("%f", arr + i);
}
QuickSort(arr, 0, n-1);
printf("
Output:
");
printf("
Tang dan:
");
FOR(i, 0, n)
printf("%.2f
", arr[i]);
printf("
Giam dan:
");
FOR(i, 0, n / 2)
SWAP(float, arr[i], arr[n - 1 - i])
FOR(i, 0, n)
printf("%.2f
", arr[i]);
printf("
Giam dan theo gia tri tuyet doi:
");
FOR(i, 0, n) {
**(arr2 + i) = arr[i];
if (arr[i] < 0)
*(*(arr2 + i) + 1) = - arr[i];
else
*(*(arr2 + i) + 1) = arr[i];
}
FOR(i, 0, n)
arr_t[i] = *(arr2 + i) + 1;
QuickSort2(arr_t, 0, n);
FOR(i, 0, n)
printf("%.2f
", *(arr_t[i] - 1));
}
void QuickSort(float *arr, int l, int r)
{
int i, j;
float temp, key;
srand(time(NULL));
key = arr[l + rand() % (r - l + 1)];
i = l;
j = r;
while (i <= j) {
while (arr[i] < key)
++i;
while (arr[j] > key)
--j;
if (i <= j) {
if (i < j)
SWAP(float, arr[i], arr[j])
++i;
--j;
}
}
if (l < j) QuickSort(arr, l, j);
if (i < r) QuickSort(arr, i, r);
}
void QuickSort2(float **arr, int l, int r)
{
int i, j;
float key;
srand(time(NULL));
key = **(arr + l + rand() % (r - l + 1));
i = l;
j = r;
while (i <= j) {
while (**(arr + i) < key)
++i;
while (**(arr + j) > key)
--j;
if (i <= j) {
if (i < j)
SWAP(float*, arr[i], arr[j])
++i;
--j;
}
}
if (l < j) QuickSort2(arr, l, j);
if (i < r) QuickSort2(arr, i, r);
}
Bài liên quan