import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
int [] arr = {1, 2, 3, 4, 5, 6};
bubble(arr);
System.out.println(Arrays.toString(arr));
}
public static void bubble(int [] arr){
int temp = 0;
boolean flag = false;
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr.length - 1; j++){
if(arr[j] > arr[j + 1]){
flag = true;
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
if(!flag){
break;
}
}
}
}
public static void selectSort(int [] arr){
int minIndex;
int minValue;
int temp = 0;
for(int i = 0; i < arr.length; i++){
minIndex = i;
minValue = arr[i];
for(int j = i + 1; j < arr.length; j++){
if(arr[j] < minValue){
minIndex = j;
minValue = arr[j];
}
}
if(minIndex == i){
continue;
}
temp = arr[i];
arr[i] = minValue;
arr[minIndex] = temp;
}
}
public static void insertSort(int [] arr){
int temp = 0;
for(int i = 0; i < arr.length - 1; i++){
int j = i;
temp = arr[j + 1];
while (j >= 0){
if(arr[j] > temp){
arr[j + 1] = arr[j];
j--;
} else {
break;
}
}
arr[j + 1] = temp;
}
}
public static void quickSort(int [] arr, int left, int right){
int mid = (left + right) / 2;
int i = left;
int j = right;
int temp = 0;
while (i < j){
while (arr[i] < arr[mid]){
i++;
}
while (arr[j] > arr[mid]){
j--;
}
if(i >= j){
break;
}
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
if(arr[i] == arr[mid]){
j--;
}
if(arr[j] == arr[mid]){
i++;
}
}
if(i == j){
i ++;
j--;
}
if(left < j){
quickSort(arr,left,j);
}
if(right > i){
quickSort(arr,i,right);
}
}
public static void mergeSort(int [] arr, int left, int right, int [] temp){
int mid = (left + right) / 2;
if (left < right){
mergeSort(arr,left,mid,temp);
mergeSort(arr,mid + 1, right,temp);
merge(arr,left,mid, right,temp);
}
}
public static void merge(int [] arr, int left, int mid, int right, int [] temp ){
int i = left;
int j = mid + 1;
int t = 0;
while (i <= mid && j <= right){
if(arr[i] <= arr[j]){
temp[t] = arr[i];
i += 1;
} else {
temp[t] = arr[j];
j += 1;
}
t += 1;
}
while (i <= mid){
temp[t] = arr[i];
i += 1;
t += 1;
}
while (j <= right){
temp[t] = arr[j];
j += 1;
t += 1;
}
int tempLeft = left;
t = 0;
while (tempLeft <= right){
arr[tempLeft] = temp[t];
tempLeft += 1;
t += 1;
}
}
public static void shellSort(int [] arr){
int temp = 0;
for(int gap = arr.length / 2; gap > 0; gap /= 2){
for(int i = gap; i < arr.length; i++){
for(int j = i - gap; j >= 0; j -= gap){
if(arr[j] > arr[j + gap]){
temp = arr[j];
arr[j] = arr[j + gap];
arr[j + gap] = temp;
}
}
}
}
}
public static void shellSort01(int []arr){
int tmp = 0;
for(int gap = arr.length / 2; gap > 0; gap /= 2){
for(int i = gap; i < arr.length; i++){
int j = i;
tmp = arr[j];
if(arr[j] < arr[j - gap]){
while (j - gap >= 0 && tmp < arr[j - gap]){
arr[j] = arr[j - gap];
j -= gap;
}
arr[j] = tmp;
}
}
}
}
public static void radixSort(int [] arr){
int [][] bucket = new int[10][arr.length];
int [] bucketCount = new int[10];
int max = arr[0];
for(int i = 1; i < arr.length; i++){
if(arr[i] > max){
max = arr[i];
}
}
int maxLength = (""+max).length();
int base = 1;
for(int i = 0; i < maxLength; base *= 10,i++){
for(int k = 0; k < arr.length; k++){
int digit = (arr[k] / base) % 10;
bucket[digit][bucketCount[digit]] = arr[k];
bucketCount[digit]++;
}
int index = 0;
for(int j = 0; j < bucket.length; j++){
if(bucketCount[j] != 0){
for(int h = 0; h < bucketCount[j]; h++){
arr[index] = bucket[j][h];
index ++;
}
bucketCount[j] = 0;
}
}
}
}