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

Gió viết 23:03 ngày 30/09/2018

Lỗi không phải do quicksort

chichi viết 23:07 ngày 30/09/2018

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]<<" ";
}
}

Qui Ji viết 23:09 ngày 30/09/2018

Mình thử tạo ra xuất và nhập riêng nhưng không hiện ra cái đã nhập:

//Tao Mang
void InputArr (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]; 
	}
}
//Xuat Mang
void OutputArr(int a[],int n)
{
	cout <<"Mang co dc: " << endl;
	for (int i=0;i<n;i++)
	{
		cout << a[i] <<" ";
	}
}

Kết quả:

Vậy là cái xuất mảng mình bị lỗi hả bạn

Qui Ji viết 23:05 ngày 30/09/2018

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

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 ^^)

Sáng Béo viết 23:13 ngày 30/09/2018

Mình thử tạo ra xuất và nhập riêng nhưng không hiện ra cái đã nhập

Thử
void InputArr (int a[],int &n)

Qui Ji viết 23:16 ngày 30/09/2018

Ồ cảm ơn nhé được rồi ^^, cảm ơn bạn chichi luôn nhé, nãy mình để trong hàm main ^^

Bài liên quan
0