Cỏc thuật toỏn cơ bản trờn mảng

Một phần của tài liệu giáo trình về java 2008 (Trang 70 - 71)

Vớ dụ: Sắp xếp tuyến tớnh

Đõy là một vớ dụ sắp xếp cỏc phần tử của mảng tăng dần theo thuật toỏn “nổi bọt” - tức là sau mỗi vũng lặp duyệt, phần tử nào lớn nhất sẽ bị đẩy xuống cuối cựng.

// Sắp xếp cỏc phần tử của mảng public void bubbleSort( int array2[] ) {

// Duyệt qua mỗi phần tử của mảng

for ( int pass = 1; pass < array2.length; pass++ ) { // Vũng lặp so sỏnh và đổi chỗ

for ( int element = 0; element < array2.length - pass; element++ ) { // So sỏnh 2 phần tử liền kề và đổi chỗ nếu cần

if ( array2[ element ] > array2[ element + 1 ] ) swap( array2, element, element + 1 ); } }

}

// Hàm đổi chỗ 2 phần tử của một mảng

public void swap( int array3[], int first, int second ) {

int hold; // Biến trung gian để hoỏn đổi hold = array3[ first ];

array3[ first ] = array3[ second ]; array3[ second ] = hold;

Vớ dụ: Tỡm kiếm nhị phõn trờn mảng đó được sắp xếp:

Thụng thường việc tỡm kiếm diễn ra bằng phộp duyệt lần lượt cỏc phần tử của mảng. Ta gọi phương phỏp này là tỡm kiếm tuyến tớnh.

Đối với cỏc mảng đó được sắp xếp, ta cú một phương phỏp tỡm kiếm hiệu quả hơn, gọi là tỡm kiếm nhị phõn.

Giả sử ta cú một mảng: int[] b={1,5,7,8,34,56,67,89,100}; Đó được sắp xếp tăng dần.

Giả sử ta cần tỡm vị trớ của một phần tử cú giỏ trị 7. Trước tiờn, ta so sỏnh 7 với vị trớ đứng giữa của mảng là 34 thỡ 7 < 34 nờn ta chắc chắn nếu cú thỡ 7 sẽ nằm ở nửa trước của mảng. Tiếp tục làm việc này với nửa trước của mảng, so sỏnh 7 với 5 thỡ 7>5 nờn phần tử cần tỡm nếu cú sẽ nằm ở phần sau của nửa này gồm 2 phần tử 7,8. Lần phõn đụi cuối cựng này cho ta kết quả.

Thủ tục này được cài đặt như sau:

public int binarySearch( int array2[], int key ) {

int low = 0; // Chỉ số dưới

int high = array.length - 1; // Chỉ số trờn int middle; // chỉ số của phần tử trung gian

// Lặp cho đến khi chỉ số dưới lớn hơn hoặc bằng chỉ số trờn while ( low <= high ) {

// Xỏc định chỉ số phần tử giữa middle = ( low + high ) / 2;

// Nếu khúa cần tỡm trựng với phần tử giữa thỡ trả về kết quả ngay if ( key == array[ middle ] )

return middle;

// Nếu khúa nhở hơn phần tử giữa, đặt lại chỉ số trờn else if ( key < array[ middle ] )

high = middle - 1;

// Khúa lớn hơn phần tử giữa, đặt lại chỉ số dưới else

low = middle + 1; }

return -1; // Khụng tỡm thấy }

Một phần của tài liệu giáo trình về java 2008 (Trang 70 - 71)

Tải bản đầy đủ (PDF)

(146 trang)