update at 2020-10-01 17:34:22 by ehlxr

dev
ehlxr 2020-10-01 17:34:22 +08:00
parent 3a3240d4e5
commit 58684d9cdf
5 changed files with 238 additions and 95 deletions

View File

@ -0,0 +1,50 @@
package me.ehlxr.leetcode;
import java.util.Arrays;
/**
*
* <p>
* 访
* 访
*
* @author ehlxr
* @since 2020-10-01 16:40.
*/
public class BubbleSort {
/**
*
* .
* .
* .
* . ~
*/
public static void sort(int[] arr) {
//外层:需要 length-1 次循环比较
for (int i = 0; i < arr.length - 1; i++) {
//内层:每次循环需要两两比较的次数,每次比较后,都会将当前最大的数放到最后位置,所以每次比较次数递减一次
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr, j, j + 1);
}
}
System.out.println("Sorting: " + Arrays.toString(arr));
}
}
public static void swap(int[] arr, int i, int j) {
// arr[i] = arr[i] + arr[j];
// arr[j] = arr[i] - arr[j];
// arr[i] = arr[i] - arr[j];
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
public static void main(String[] args) {
sort(new int[]{4, 9, 1, 6, 8, 2});
}
}

View File

@ -3,7 +3,9 @@ package me.ehlxr.leetcode;
import java.util.Arrays;
/**
*
*
*
*
*
*
*
@ -14,11 +16,11 @@ public class InsertSort {
/**
* .
* .
* .
* .
* . 3
* .
* . ~
* . ~
*/
public static void sort(int[] arr) {
for (int i = 1; i < arr.length; i++) {

View File

@ -2,91 +2,40 @@ package me.ehlxr.leetcode;
import java.util.Arrays;
/**
*
* <p>
* Quicksort
*
*
*
*
*
* @author ehlxr
* @since 2020-10-01 16:40.
*/
public class QuickSort {
/**
*
*
* @param arr
* @param low
* @param high
*/
public static void sort(int[] arr, int low, int high) {
if (arr == null || arr.length <= 0) {
return;
}
if (low >= high) {
return;
}
int left = low;
int right = high;
int key = arr[left];
while (left < right) {
while (left < right && arr[right] >= key) {
right--;
}
while (left < right && arr[left] <= key) {
left++;
}
if (left < right) {
swap(arr, left, right);
}
}
swap(arr, low, left);
System.out.println("Sorting: " + Arrays.toString(arr));
sort(arr, low, left - 1);
sort(arr, left + 1, high);
}
public static void swap(int[] arr, int low, int high) {
int tmp = arr[low];
arr[low] = arr[high];
arr[high] = tmp;
}
/**
*
*
* @param arr
* @param low
* @param high
*/
public static void sort2(int[] arr, int low, int high) {
if (arr == null || arr.length <= 0) {
return;
}
if (low >= high) {
return;
}
int left = low;
int right = high;
int temp = arr[left]; //挖坑1保存基准的值
while (left < right) {
while (left < right && arr[right] >= temp) {
right--;
}
arr[left] = arr[right]; //坑2从后向前找到比基准小的元素插入到基准位置坑1中
while (left < right && arr[left] <= temp) {
left++;
}
arr[right] = arr[left]; //坑3从前往后找到比基准大的元素放到刚才挖的坑2中
}
arr[left] = temp; //基准值填补到坑3中准备分治递归快排
System.out.println("Sorting: " + Arrays.toString(arr));
sort2(arr, low, left - 1);
sort2(arr, left + 1, high);
}
public static void main(String[] args) {
int[] arrs = {2, 4, 7, 5};
sort3(arrs, 0, arrs.length - 1);
int[] arr = {4, 9, 1, 6, 8, 2};
sort(arr, 0, arr.length - 1);
}
public static void sort3(int[] arr, int l, int r) {
/**
* 使listsub-lists
*
* . "基准"pivot
* .
* partition
* . recursively
* <p>
*
* iteration
*
* @param arr
* @param l
* @param r
*/
public static void sort(int[] arr, int l, int r) {
if (l >= r) {
return;
}
@ -95,25 +44,106 @@ public class QuickSort {
return;
}
int i = l, j = r, x = l;
int k = arr[x];
int i = l, j = r,
// 一般选择数组左边界作为基准
k = l;
int p = arr[k];
while (l < r) {
while (l < r && arr[r] >= k) {
// 首先循环递减右边界,直到找到小于基准的元素,相互交换
while (l < r && arr[r] >= p) {
r--;
}
arr[x] = arr[r];
x = r;
arr[k] = arr[r];
k = r;
while (l < r && arr[l] <= k) {
// 其次循环递增左边界,直到找到大于基准的元素,相互交换
while (l < r && arr[l] <= p) {
l++;
}
arr[x] = arr[l];
x = l;
arr[k] = arr[l];
k = l;
// 循环以上步骤,直到 l 和 r 相遇
}
arr[x] = k;
arr[k] = p;
System.out.println("Sorting: " + Arrays.toString(arr));
sort3(arr, i, x - 1);
sort3(arr, x + 1, j);
sort(arr, i, k - 1);
sort(arr, k + 1, j);
}
/*
*
*/
// public static void sort(int[] arr, int low, int high) {
// if (arr == null || arr.length <= 0) {
// return;
// }
// if (low >= high) {
// return;
// }
//
// int left = low;
// int right = high;
//
// int key = arr[left];
//
// while (left < right) {
// while (left < right && arr[right] >= key) {
// right--;
// }
// while (left < right && arr[left] <= key) {
// left++;
// }
// if (left < right) {
// swap(arr, left, right);
// }
// }
// swap(arr, low, left);
// System.out.println("Sorting: " + Arrays.toString(arr));
// sort(arr, low, left - 1);
// sort(arr, left + 1, high);
// }
/*
*
*/
// public static void sort2(int[] arr, int low, int high) {
// if (arr == null || arr.length <= 0) {
// return;
// }
// if (low >= high) {
// return;
// }
//
// int left = low;
// int right = high;
// // 挖坑1保存基准的值
// int temp = arr[left];
//
// while (left < right) {
// while (left < right && arr[right] >= temp) {
// right--;
// }
// //坑2从后向前找到比基准小的元素插入到基准位置坑1中
// arr[left] = arr[right];
// while (left < right && arr[left] <= temp) {
// left++;
// }
// //坑3从前往后找到比基准大的元素放到刚才挖的坑2中
// arr[right] = arr[left];
// }
// //基准值填补到坑3中准备分治递归快排
// arr[left] = temp;
// System.out.println("Sorting: " + Arrays.toString(arr));
// sort2(arr, low, left - 1);
// sort2(arr, left + 1, high);
// }
public static void swap(int[] arr, int low, int high) {
int tmp = arr[low];
arr[low] = arr[high];
arr[high] = tmp;
}
}

View File

@ -0,0 +1,53 @@
package me.ehlxr.leetcode;
import java.util.Arrays;
/**
*
* <p>
*
*
* @author ehlxr
* @since 2020-10-01 16:55.
*/
public class SelectSort {
/**
* .
* .
* . N - 1
*/
public static void sort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
// for (int j = i + 1; j < arr.length; j++) {
// if (arr[i] > arr[j]) {
// swap(arr, i, j);
// }
// }
int min = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[min] > arr[j]) {
min = j;
}
}
if (min != i) {
swap(arr, min, i);
}
System.out.println("Sorting: " + Arrays.toString(arr));
}
}
public static void swap(int[] arr, int i, int j) {
// arr[i] = arr[i] + arr[j];
// arr[j] = arr[i] - arr[j];
// arr[i] = arr[i] - arr[j];
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
public static void main(String[] args) {
sort(new int[]{4, 9, 1, 6, 8, 2});
}
}

View File

@ -0,0 +1,8 @@
package me.ehlxr.leetcode;
/**
* @author ehlxr
* @since 2020-10-01 16:40.
*/
public class ShellSort {
}