public class BubbleSort {
private static void bubbleSort(int[] nums){
for (int i = 0; i < nums.length-1; i++) {
for (int j = nums.length-1; j > i; j--) {
if (nums[j] < nums[j-1]){
int temp = nums[j];
nums[j] = nums[j-1];
nums[j-1] = temp;
}
}
}
}
private static void bubbleSortBest(int[] nums){
boolean flag = false;
for (int i = 0; i < nums.length-1; i++) {
flag = false;
for (int j = nums.length-1; j > i; j--) {
if (nums[j] < nums[j-1]){
int temp = nums[j];
nums[j] = nums[j-1];
nums[j-1] = temp;
flag = true;
}
}
if(!flag) {
break;
}
}
}
public static void main(String[] args){
int[] nums = new int[]{5,2,9,4,7,6,1,3,8};
bubbleSortBest(nums);
}
}
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class BucketSort {
public static void bucketSort(int[] nums) {
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
for (int i = 0; i < nums.length; i++) {
max = Math.max(max, nums[i]);
min = Math.min(min, nums[i]);
}
int bucketNum = (max - min) / nums.length + 1;
System.out.println("max "+max+" min "+min+" bucketNum "+bucketNum);
List<List<Integer>> bucket = new ArrayList<>();
for (int i = 0; i < bucketNum; i++) {
bucket.add(new ArrayList<>());
}
for (int i = 0; i < nums.length; i++) {
int num = (nums[i] - min) / nums.length;
bucket.get(num).add(nums[i]);
}
for (int i = 0; i < bucket.size(); i++) {
Collections.sort(bucket.get(i));
}
System.out.println(bucket.toString());
}
public static void main(String[] args) {
int[] nums = new int[]{5,2,9,4,7,6,1,3,8};
bucketSort(nums);
}
}
import java.util.Arrays;
public class CountSort {
public static void countSort(int[] nums) {
int max = Integer.MIN_VALUE;
for (int i = 0; i < nums.length; i++) {
max = Math.max(max, nums[i]);
}
int[] count = new int[max+1];
for (int i = 0; i < nums.length; i++) {
count[nums[i]] = count[nums[i]] + 1;
}
System.out.println(Arrays.toString(count));
int index = 0;
for (int i = 0; i < max; i++) {
for (int j = 0; j < count[i]; j++) {
nums[index++] = i;
}
}
System.out.println(Arrays.toString(nums));
}
public static void main(String[] args) {
int[] nums = new int[]{5,2,9,4,7,6,1,3,8,20};
countSort(nums);
}
}
public class InsertSort {
public static void insertSort(int[] nums) {
int temp;
for (int i = 0; i < nums.length-1; i++) {
for (int j = i+1; j > 0; j--) {
if (nums[j] < nums[j-1]){
temp = nums[j-1];
nums[j-1] = nums[j];
nums[j] = temp;
} else {
break;
}
}
}
}
public static void insertBinarySort(int[] nums) {
int temp;
int low;
int high;
int mid;
for (int i = 0; i < nums.length-1; i++) {
temp = nums[i+1];
low = 0;
high = i;
while(low <= high) {
mid = (low + high) /2;
if (nums[mid] < temp) {
low = mid + 1;
} else {
high = mid - 1;
}
}
for (int j = 0; j > high ; j--) {
nums[j+1] = nums[j];
}
}
}
public static void main(String[] args) {
int[] nums = new int[]{5,2,9,4,7,6,1,3,8};
insertSort(nums);
}
}
import java.util.Arrays;
public class MergeSort {
public static int[] mergeSort(int[] nums, int low, int high) {
int mid = (low + high)/2;
if (low < high) {
mergeSort(nums, low, mid);
mergeSort(nums, mid+1, high);
merge(nums, low, mid, high);
}
return nums;
}
public static void merge(int[] nums, int low, int mid, int high) {
int[] temp = new int[high - low+1];
int i = low;
int j = mid + 1;
int k = 0;
while (i <= mid && j <= high) {
if (nums[i] < nums[j]) {
temp[k++] = nums[i++];
} else {
temp[k++] = nums[j++];
}
}
while (i <= mid) {
temp[k++] = nums[i++];
}
while (j <= high) {
temp[k++] = nums[j++];
}
for (int l = 0; l < temp.length; l++) {
nums[l + low] = temp[l];
}
System.out.println("当前排序结果: "+ Arrays.toString(temp));
}
public static void main(String[] args) {
int[] nums = new int[]{5,2,9,4,7,6,1,3,8};
mergeSort(nums, 0, nums.length-1);
}
}
import java.util.Arrays;
public class QuickSort {
public static void quickSort(int[] nums, int left, int right) {
if (left < right) {
int pivot = partition(nums, left, right);
quickSort(nums, left, pivot -1);
quickSort(nums, pivot + 1, right);
}
}
public static int partition(int[] nums, int left, int right) {
int pivotIndex = left;
int pivot = nums[pivotIndex];
int l = left + 1;
int r = right;
System.out.println("pivot: "+pivot+ Arrays.toString(nums));
while (l <= r) {
if (nums[l] > pivot && nums[r] < pivot) {
swap(nums, l++, r--);
}
if (nums[l] <= pivot) l++;
if (nums[r] >= pivot) r--;
System.out.println("当前结果"+Arrays.toString(nums));
}
swap(nums, pivotIndex, r);
System.out.println("此轮结束"+Arrays.toString(nums));
return r;
}
public static void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
public static void main(String[] args) {
int[] nums = new int[]{5,2,9,4,7,6,1,3,8};
quickSort(nums, 0, nums.length-1);
}
}
public class SelectSort {
public static void selectSort(int[] nums) {
for (int i = 0; i < nums.length - 1; i++) {
int minIndex = i;
for (int j = i+1; j < nums.length; j++) {
if (nums[j] < nums[minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
int temp = nums[i];
nums[i] = nums[minIndex];
nums[minIndex] = temp;
}
}
}
}
public class SortStabilization {
private static void bubbleSort(Product[] products){
for (int i = 0; i < products.length-1; i++) {
for (int j = products.length-1; j > i; j--) {
if (products[j].getPrice() < products[j-1].getPrice()){
Product temp = products[j];
products[j] = products[j-1];
products[j-1] = temp;
}
}
}
for (int i = 0; i < products.length-1; i++) {
for (int j = products.length-1; j > i; j--) {
if (products[j].getSale() < products[j-1].getSale()){
Product temp = products[j];
products[j] = products[j-1];
products[j-1] = temp;
}
}
}
}
private static void bubbleSort2(Product[] products){
for (int i = 0; i < products.length-1; i++) {
for (int j = products.length-1; j > i; j--) {
if (products[j-1].getPrice() >= products[j].getPrice() ){
Product temp = products[j];
products[j] = products[j-1];
products[j-1] = temp;
}
}
}
for (int i = 0; i < products.length-1; i++) {
for (int j = products.length-1; j > i; j--) {
if (products[j-1].getSale() >= products[j].getSale()){
Product temp = products[j];
products[j] = products[j-1];
products[j-1] = temp;
}
}
}
}
private static void bubbleSort3(Product[] products){
for (int i = 0; i < products.length-1; i++) {
for (int j = products.length-1; j > i; j--) {
if (products[j].compareTo(products[j-1]) < 0){
Product temp = products[j];
products[j] = products[j-1];
products[j-1] = temp;
}
}
}
}
public static void main(String[] args){
Product product1 = new Product(3,10);
Product product2 = new Product(1,9);
Product product3 = new Product(2,9);
Product product4 = new Product(0,9);
Product[] products = new Product[]{product1,product2,product3,product4};
bubbleSort3(products);
for (Product product : products) {
System.out.println(product.toString());
}
}
}