Bitonic Sort에서 비교는 정렬할 데이터에 의존하지 않고 미리 정의된 순서(Bitonic sequence)로 수행됩니다. Bitonic Sort Java 프로그램의 예를 살펴보겠습니다. -
예시
public class Demo{ void compare_swap(int my_arr[], int i, int j, int direction){ if ((my_arr[i] > my_arr[j] && direction == 1) || (my_arr[i] < my_arr[j] && direction == 0)){ int temp = my_arr[i]; my_arr[i] = my_arr[j]; my_arr[j] = temp; } } void merge_vals(int my_arr[], int low, int cnt, int direction){ if (cnt>1){ int k = cnt/2; for (int i=low; i<low+k; i++) compare_swap(my_arr,i, i+k, direction); merge_vals(my_arr,low, k, direction); merge_vals(my_arr,low+k, k, direction); } } void sort_vals(int my_arr[], int low, int cnt, int direction){ if (cnt>1){ int k = cnt/2; sort_vals(my_arr, low, k, 1); sort_vals(my_arr,low+k, k, 0); merge_vals(my_arr, low, cnt, direction); } } static void print_vals(int my_arr[]){ int n = my_arr.length; for (int i=0; i<n; ++i) System.out.print(my_arr[i] + " "); System.out.println(); } public static void main(String args[]){ int my_arr[] = {12, 67, 91, 54, 72, 32, 11, 0}; int up = 1; Demo my_ob = new Demo(); System.out.println("The object of the class has been created."); my_ob.sort_vals(my_arr, 0, my_arr.length, up); System.out.println("The array after performing bitonic sort is"); print_vals(my_arr); } }
출력
The object of the class has been created. The array after performing bitonic sort is 0 11 12 32 54 67 72 91
Demo라는 클래스에는 배열을 매개변수로 사용하고 정렬이 수행되어야 하는 방향을 확인하는 'compare_swap' 함수가 포함되어 있습니다. 따라서 요소가 교환됩니다. 'merge_vals'라는 또 다른 함수가 정의되어 배열을 반복하고 특정 값으로 'compare_swap' 함수를 호출합니다.
다음으로 'merge_vals' 함수를 다양한 매개변수로 호출합니다. 다른 값으로 함수 내부에서 호출되는 'sort_vals'라는 또 다른 함수가 정의되어 있습니다. 그런 다음 이러한 정렬된 값
병합됩니다. 배열을 매개변수로 사용하고 배열의 요소를 통해 'for' 루프를 실행하고 콘솔에 인쇄하는 'print_vals'라는 정적 함수가 정의되어 있습니다.
main 함수는 'up' 변수에 대한 배열과 값을 정의합니다. 새로운 클래스 객체가 생성되고 정의된 배열에서 'sort_now' 함수가 호출됩니다. 그런 다음 출력이 콘솔에 인쇄됩니다.