30/09/2018, 21:03
Code quick sort không sắp xếp được
Chào mọi người, Mình đang có một vấn đề xin mọi người giúp
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <conio.h>
#define swap(type, a, b) {type temp = a; a = b; b = temp; } // hang hoan vi
using namespace std;
//Tao + Xuat Mang
void CreateArr (int a[],int n)
{
cout <<"Nhap so phan tu:"<<endl;
cin >> n;
for (int i=0;i<n;i++)
{
cout << "Nhap phan tu thu " << i+1 <<endl ;
cin>>a[i];
}
cout <<"Mang co dc: " << endl;
for (int i=0;i<n;i++)
{
cout <<a[i]<<" ";
}
}
//Quick Sort
void QuickSort (int a[], int l, int r)
{
int i = l,j = r;
int pivot = a[(l + r)/2];
while (i<=j)
{
while (a[i] <pivot) i++;
while (a[j] >pivot) j--;
if (i<=j)
swap (int, a[i], a[j]);
i++;
j--;
}
if (l < j) QuickSort(a, l, j); // lam lai voi mang a[l]....a[j]
if (i < r) QuickSort(a, i, r); // lam lai voi mang a[i]....a[r]
}
int main ()
{
int a[100];
int n;
CreateArr (a,n);
QuickSort (a,0,n-1);
cout<<endl<<"Sap xep:";
for (int i=0;i<n;i++)
{
cout <<a[i]<<" ";
}
}
thì sau khi chạy mình không sắp xếp đc, mình mới tập code nên chưa rõ nhiều thứ mong mọi người chỉ dẫn (code này mình tham khảo và tự viết lại)
Complie : Devc
Bài liên quan
Lỗi không phải do quicksort
Hàm main bạn gọi CreateArr(a,n) xong ra ngoài n vẫn bằng 0 (google truyền tham chiếu c); quicksort mình cũng sửa lại 1 ít
//Quick Sort
void QuickSort (int a[], int l, int r)
{
if(l>=r) return;
int i = l,j = r;
int pivot = a[(l + r)/2];
while (i<j)
{
while (a[i] <pivot) i++;
while (a[j] >pivot) j–;
if (i<j)
swap (int, a[i], a[j]);
i++;
j–;
}
if (l < j) QuickSort(a, l+1, j); // lam lai voi mang a[l]…a[j]
if (i < r) QuickSort(a, i-1, r); // lam lai voi mang a[i]…a[r]
}
int main ()
{
int a[100];
int n;
cout <<“Nhap so phan tu:”<<endl;
cin >> n;
CreateArr (a,n);
QuickSort (a,0,n-1);
cout<<endl<<“Sap xep:”;
for (int i=0;i<n;i++)
{
cout <<a[i]<<" ";
}
}
Mình thử tạo ra xuất và nhập riêng nhưng không hiện ra cái đã nhập:
Kết quả:
Vậy là cái xuất mảng mình bị lỗi hả bạn
Mình google thử rồi, thêm “&” vào thì bị lỗi … Bạn có chỉ mình cách tạo mảng cơ bản theo kiểu nhập số phần tử như thế này được không (mình mới tập code ^^)
Thử
void InputArr (int a[],int &n)
Ồ cảm ơn nhé được rồi ^^, cảm ơn bạn chichi luôn nhé, nãy mình để trong hàm main ^^