import org.apache.commons.lang3.StringUtils; public class Main { static int elementsInArray = 14; private static int parentH(int i) { if( (i/2) % 2 == 0 ) return i/2 - 1; return i/2; } private static int parentL(int i) { if( (i/2) % 2 == 1 ) return i/2 - 1; return i/2 - 2; } private static int parent(int i){ if( i % 2 == 0 ) return parentL(i); return parentH(i); } private static int rightH(int i){ return 2*i + 1; } private static int leftH(int i){ return 2*i + 3; } private static int rightL(int i){ return 2*i + 4; } private static int leftL(int i) { return 2*i + 2; } private static int right(int i){ if( i % 2 == 0) return rightL(i) > elementsInArray-1 ? i + 1 : rightL(i); return rightH(i) > elementsInArray-1 ? i - 1 : rightH(i); } private static int left(int i){ if(i % 2 == 0) return leftL(i) > elementsInArray-1 ? i + 1 : leftL(i); return leftH(i) > elementsInArray-1 ? i - 1 : leftH(i); } public static void main(String[] args) { int num[] = new int[100]; num[0] = 1; num[1] = 15; num[2] = 2; num[3] = 13; num[4] = 133; num[5] = 12; num[6] = 4; num[7] = 10; num[8] = 5; num[9] = 9; num[10] = 6; num[11] = 8; num[12] = 7; num[13] = 11; porzadkuj(num, 4); for( int i = 0; i < elementsInArray; ++i){ System.out.println("rodzic dla : " + i + " to : " + parent(i)); } for( int i = 0; i < elementsInArray; ++i){ System.out.println(" element : " + i + " lewy: " + left(i) + " prawy: " + right(i)); } System.out.println(StringUtils.center("[0] " + num[0] + " ", 50)); System.out.println(); System.out.print(StringUtils.center("[2] " + num[2] + " ", 27)); System.out.println(StringUtils.center("[4] " + num[4] + " ", 27)); System.out.println(); System.out.print(StringUtils.center("[6] " + num[6] + " ", 14)); System.out.print(StringUtils.center("[8] " + num[8] + " ", 14)); System.out.print(StringUtils.center("[10] " + num[10] + " ", 14)); System.out.println(StringUtils.center("[12] " + num[12] + " ", 14)); System.out.println(); System.out.println(); System.out.print(StringUtils.center("[7] " + num[7] + " ", 14)); System.out.print(StringUtils.center("[9] " + num[9] + " ", 14)); System.out.print(StringUtils.center("[11] " + num[11] + " ", 14)); System.out.println(StringUtils.center("[13] " + num[13] + " ", 14)); System.out.println(); System.out.print(StringUtils.center("[3] " + num[3] + " ", 27)); System.out.println(StringUtils.center("[5] " + num[5] + " ", 27)); System.out.println(); System.out.println(StringUtils.center("[1] " + num[1] + " ", 50)); } private static void porzadkuj(int[] A, int i){ if( i % 2 == 0 ){ if( parent(i) >= 0 && A[i] < A[parent(i)] ) { swap(A, parent(i), i); porzadkuj(A, parent(i)); } if( A[right(i)] < A[i] || A[left(i)] < A[i]){ if( A[right(i)] < A[left(i)]) { swap(A, right(i), i); porzadkuj(A, right(i)); }else { swap(A, left(i), i); porzadkuj(A, left(i)); } } } if( i % 2 == 1){ if( parent(i) >= 0 && A[i] > A[parent(i)] ) { swap(A, parent(i), i); porzadkuj(A, parent(i)); } if( A[right(i)] > A[i] || A[left(i)] > A[i]){ if( A[right(i)] > A[left(i)]) { swap(A, right(i), i); porzadkuj(A, right(i)); }else { swap(A, left(i), i); porzadkuj(A, left(i)); } } } } private static void swap(int[] A, int i1, int i2){ int tmp = A[i1]; A[i1] = A[i2]; A[i2] = tmp; } }