Thứ Hai, 2 tháng 1, 2017

Thuật toán sắp xếp Chọn trực tiếp - Thuật toán sắp xếp Selection Sort

 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
#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 SelectionSort(int A[], int N)
{
 int VTmin = 0, i = 0, j = 0; // chỉ số phần tử nhỏ nhất trong dãy hiện hành 
 for (i = 0; i < N - 1; i++)//chỉ số đầu tiên của dãy hiện hành
 {
  VTmin = i;
  for (j = i + 1; j < N; j++)
   if (A[VTmin] > A[j])
    VTmin = j; // lưu vtrí phần tử hiện nhỏ nhất 
  Swap(A[VTmin], A[i]);
 }
}

int main()
{

 int N = 0;
 NhapN(N);

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

 SelectionSort(A, N);
 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