CODECÁCTHUẬT TỐN VỀ SẮPXẾP BẰNG NGƠN NGỮ PASCAL Sắpxếpthuật tốn khơng ngơn ngữ lập trình Pascal mà nhiều lĩnh vực công nghệ khác Bài viết sau để cập đến số thuật tốn xếp ngơn ngữ Pascal Bubble Sort (Sắp xếp bọt) Ý tưởng: Giả sử có mảng có n phần tử Chúng ta tiến hành duyệt từ cuối lên đầu,so sánh phần tử kề nhau, chúng bị ngược thứ tự đổi vị trí, việc duyệt cặp phần tử thứ n-1 n Tiếp theo so sánh cặp phần tử thứ n-2 n-1,… so sánh đổi chỗ cặp phần tử thứ thứ hai Sau bước phần tử nhỏ lên vi trí (nó giống hình ảnh “bọt” khí nhẹ lên trên) Tiếp theo tiến hành với phần tử từ thứ đến thứ n Procedure bubblesort(var amang; Ninteger); begin var i,j integer; for i=2 to N for j=N down to i if (a[j] a[j-1]) then hoanvi(a[j-1],a[j]); end; Selection Sort (Sắp xếp chọn) Ý tưởng: Chọn phần tử nhỏ n phần tử ban đầu, đưa phần tử vị trí dãy hành Sau khơng quan tâm đến nữa, xem dãy hành n-1 phần tử dãy ban đầu, vị trí thứ Lặp lại trình cho dãy hành đến dãy hành phần tử Dãy ban đầu có n phần tử, tóm tắt ý tưởng thuật tốn thực n-1 lượt việc đưa phần tử nhỏ dãy hành vị trí đầu dãy Các bước tiến hành sau: Bước 1: i=1 Bước 2: Tìm phần tử a[min] nhỏ dãy hành từ a[i] đến a[n] Bước 3: Hoán vị a[min] a[i] Bước 4: Nếu i1 and a[pos-1]>x)do begin a[pos]:= a[pos-1]; dec(pos); end; a[pos]:= x; end; {sap xep giam dan} while (pos>1) begin if(a[pos-1] > x)then begin a[pos]:= a[pos-1]; dec(pos); end; a[pos]:= x; QuickSort procedure Quicksort ( Var A: Mang); Procedure Sort( Left, Right: Integer); Var i, j, k: Integer; Begin end; Begin End; i:= Left; j:= Right; k:= A[(Left + Right) Div 2]; Repeat While A[i] < k Do Inc(i); While k < A[j] Do Dec(j); If i j Then Begin HoanVi(A[i],A[j]); Inc(i); Dec(j); end; Until i > j; If Left < j Then Sort(Left,j); If i < Right Then Sort(i,Right); Sort(Left; Right); ... x:integer; for i:=2 to N begin x:=a[i]; pos:=i; {sap xep tang dan} while (pos>1 and a[pos-1]>x)do begin a[pos]:= a[pos-1]; dec(pos); end; a[pos]:= x; end; {sap xep giam dan} while (pos>1) begin if(a[pos-1]