IT05
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

IT05

Lớp CNTT05A - ĐH Đồng Tháp
 
Trang ChínhPortalGalleryLatest imagesTìm kiếmĐăng kýĐăng Nhập

 

 Sắp Xếp

Go down 
Tác giảThông điệp
along1089

along1089


Tổng số bài gửi : 64
Join date : 05/02/2010
Age : 38
Đến từ : lấp vò >> đồng tháp

Sắp Xếp Empty
Bài gửiTiêu đề: Sắp Xếp   Sắp Xếp I_icon_minitimeSat Feb 06, 2010 2:10 pm

Sắp Xếp Chọn ( Selection Sort)

ý tưởng : làm theo ngôn ngữ lập trình C nha, chọn phần tử nhỏ nhất đem ra đầu danh sách.

Bước 1 : chọn từ phần tử thứ 0 đến n-1 lấy phần nhỏ nhất gán vào vị trí đầu tiên thứ 0
Bước 2 : chọn từ phần tử thứ 1 đến n-1 lấy phần tử nhỏ nhất gán vào vị trí thứ 1
v.v...
sau n-1 bước thì dãy được sắp xếp xong Very Happy

Thí dụ :
cho dãy số : 5 6 2 2 10 12 9 10 9 3
mình lập bảng :
địa chỉ a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
Bước đầu 5 6 2 2 10 12 9 10 9 3
Bước 1 2 6 5 2 10 12 9 10 9 3
Bước 2 2 5 6 10 12 9 10 9 3
Bước 3 3 6 10 12 9 10 9 5
Bước 4 5 10 12 9 10 9 6
Bước 5 6 12 9 10 9 10
Bước 6 9 12 10 9 10
Bước 7 9 10 12 10
Bước 8 10 12 10
Bước 9 10 12
Kết Quả 2 2 3 5 6 9 9 10 10 12

Chương Trình :

Code:
void Select(){
   int i, j, k, temp ;
   for( i = 0; i < n; i ++ ){
      k = i ;
      for( j = i + 1 ; j < n ; j ++)
         if(a[j] < a[k])
            k = j ;
      temp = a[i] ;
      a[i] = a[k] ;
      a[k] = temp ;
   }
}

Sắp Xếp Xen (Insertion Sort)

Ý tưởng : giống như mình quánh bài 13 lá. lấy lá đầu lên xem như danh sách đã có thứ tự.
lấy lá thứ 2 lên so sánh với lá thứ 1 rồi sắp xếp, tương tự cho các lá bài còn lại.

Bước 1: lấy phần tử a[1] xen vào danh sách đã có thứ tự là phần tử a[0] thành một danh sách có thứ tự
Bước 2 : lấy phần tử a[3] xen vào danh sách a[1], a[2] sao cho a[1], a[2], a[3] là danh sách có thứ tự.
.........
sau n-1 bước thì dãy được sắp xếp xong Very Happy

Thí dụ :
cho dãy số : 5 6 2 2 10 12 9 10 9 3
lập bảng :
Địa chỉ a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
Bước đầu 5 6 2 2 10 12 9 10 9 3
Bước 1 5 6
Bước 2 2 5 6
Bước 3 2 2 5 6
Bước 4 2 25 6 10
Bước 5 2 25 6 10 12
Bước 62 25 6 9 10 12
Bước 72 25 6 9 10 10 12
Bước 82 25 6 9 9 10 10 12
Bước 92 23569 910 1012

Chương Trình :
Code:
void InSert(){
   int k, j ;
   for( int i = 1; i < n ; i ++){
      k = a[i] ;
      j = i - 1 ;
      while(a[j] > k && j >= 0){
         a[j+1] = a[j] ;
         j -- ;
      }
      a[j+1] = k ;
   }
}

Sắp Xếp Nổi Bọt ( Bubble Sort)

Ý Tưởng : cho 1 dãy số. ta lấy phần tử cuối cùng của dãy so sánh với phần tử trước nó nếu nó nhỏ hơn thì
hóan đổi vị trí cho nhau và tiếp tục so sánh với phần tử trước nó.

Bước 1 : xét phần tử a[n-1] đến a[1] . phần tử a[n-1] sẽ so sánh với phần tử a[n-2] nếu nhỏ hơn sẽ hóan đổi vị trí
của 2 phần tử cho nhau rồi tiếp tục so sánh với phần tử a[n-3] v.v... đến phần tử a[1] thì ta so sánh với phần tử
a[0]. nếu nhỏ hơn thì ta hóan đổi vị trí với nhau.

Bước 2 : xét phần tử a[n-1] đến a[2]. là vì phần tử a[0] đã là nhỏ nhất giờ tìm phần tử nhỏ nhất từ a[n-1] đến a[1].
làm tương tự như Bước 1.
.........

sau n-1 bước thì kết thúc Very Happy


Thí dụ :
cho dãy số : 5 6 2 2 10 12 9 10 9 3
lập bảng :
Địa Chỉ a[0] a[1] a[2] a[3] a[4] a[5] a[6]a[7] a[8] a[9]
Bước Đầu5 6 2 2 1012 910 9 3
Bước 12 5 6 23 10 12910 9
Bước 2 25 6 39 10 12 9 10
Bước 3 3 56 9 9 101210
Bước 4 56 9 9 10 10 12
Bước 5 699 10 10 12
Bước 6 9 9 1010 12
Bước 7 91010 12
Bước 8 10 1012
Bước 9 1012
Kết Quả 2 2 3 5 699 10 1012

Chương Trình
Code:
void Bubble(){
   int temp ;
   for(int i = 0; i < n; i ++)
      for( int j = 0; j < n-1 ; j ++)
         if(a[j] > a[j+1] ){
            temp = a[j] ;
            a[j] = a[j+1] ;
            a[j+1] = temp ;
         }
}

hôm nào làm tiếp buồn ngủ òi
Về Đầu Trang Go down
 
Sắp Xếp
Về Đầu Trang 
Trang 1 trong tổng số 1 trang
 Similar topics
-
» Phân Tích Giải Thuật (môn sắp thi tốt nghiệp )

Permissions in this forum:Bạn không có quyền trả lời bài viết
IT05 :: SOURCE - CODE CHƯƠNG TRÌNH :: C/C++-
Chuyển đến