package week_5;
import java.util.Arrays;
import java.util.Scanner;
public class SortExam {
static void swap(int[] a, int idx1, int idx2) {
int t = a[idx1];
a[idx1] = a[idx2];
a[idx2] = t;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arr = new int[] { 8, 1, 4, 2, 7, 6, 3, 5 };
System.out.println("1. 버블 2.단순 삽입 3.선택삽입 4.쉘 정렬");
switch (sc.nextInt()) {
case 1:
bubbleSort(arr);
break;
case 2:
straightSelectionSort(arr);
break;
case 3:
straightInsertionSort(arr);
break;
case 4:
shellSort(arr);
default:
break;
}
}
static void bubbleSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int changeCnt = 0;
for (int j = arr.length - 1; j > i; j--) {
if (arr[j - 1] > arr[j]) {
swap(arr, i, j);
changeCnt++;
}
}
if (changeCnt == 0)// 요소교환이 더이상 일어나지않는다면 모든 요소들이 정렬된것이라 판단
break;
}
System.out.println(Arrays.toString(arr));
}
static void straightSelectionSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i; j > 0; j--) {
if (arr[j] < arr[j - 1]) {
swap(arr, j, j - 1);
}
if (i == arr.length - 2) {
swap(arr, i, i + 1);
}
}
}
System.out.println(Arrays.toString(arr));
}
static void straightInsertionSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int index = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[index]) {
index = j;// 1,3,4
}
}
swap(arr, i, index);
}
System.out.println(Arrays.toString(arr));
}
static void shellSort(int[] arr) {
int index = arr.length;// 8
while ((index /= 2) > 0) {// 4,2,1
for (int j = 0; j < arr.length / index; j++) {// 01,0123,01234567
int indexShell = j;
for (int i = j + index; i < (arr.length / index); i++) {// 반복 횟수 => 2,4,8
System.out.println(index + " : " + j + " : " + i);
if (arr[indexShell] > arr[i]) {
indexShell = i;
}
}
swap(arr, j, indexShell);
}
}
System.out.println(Arrays.toString(arr));
}
}