Thứ Hai, 2 tháng 1, 2017

Thuật toán sắp xếp QuickSort

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream>
using namespace std;

#define MAX 100

// MẢNG 1 CHIỀU 
// 1. HÀM NHẬP SỐ PHẦN TỬ
void NhapN(int &N)
{
 do
 {
  cout << "Moi ban nhap so phan tu cua mang N = ";
  cin >> N;

  // 0 < N <= MAX
  // Điều kiện phải ngược lại 
  if (N <= 0 || N > MAX)
   cout << "Nhap sai vui long nhap la 0 < N <= " << MAX << "\n";

 } while (N <= 0 || N > MAX);
}

// 2. HÀM NHẬP MẢNG
void NhapMang(int A[], int N)
{
 for (int i = 0; i < N; i++)
 {
  cout << "A[" << i << "]= ";
  cin >> A[i];
 }
}

// 3. HÀM XUẤT MẢNG
void XuatMang(int A[], int N)
{
 for (int i = 0; i < N; i++)
 {
  cout << A[i] << "\t";
 }
}

// Hoán vị 2 số
void Swap(int &a, int &b)
{
 int t = a; a = b; b = t;
}


void QuickSort(int a[], int left, int right)
{
 int i = 0, j = 0, x = 0;
 x = a[(left + right) / 2];
 i = left; j = right;
 do
 {
  while (a[i] < x) i++;
  while (a[j] > x) j--;
  if (i <= j)
  {
   Swap(a[i], a[j]);
   i++; j--;
  }
 } while (i <= j);

 if (left<j)
  QuickSort(a, left, j);
 if (i<right)
  QuickSort(a, i, right);
}


int main()
{

 int N = 0;
 NhapN(N);

 int A[MAX];
 NhapMang(A, N);
 cout << "MANG BAN DAU\n";
 XuatMang(A, N);
 cout << "\n";

 QuickSort(A, 0, N - 1);
 cout << "Mang sau khi sap xep : \n";
 XuatMang(A, N);
 cout << "\n";

 return 0;
}

Không có nhận xét nào:

Đăng nhận xét