冒泡排序
package sort;
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
int[] arr={10,21,4,62,7,2};
int[] res = bubbleSort(arr);
System.out.println(Arrays.toString(res));
}
public static int[] bubbleSort(int[] arr){
if (arr==null||arr.length==0){
return arr;
}
int n=arr.length;
boolean swap;
for (int i = 0; i < n-1; i++) {
swap=false;
for (int j = i+1; j <n ; j++) {
if(arr[j]<arr[i]){
int temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
swap=true;
}
}
if(!swap)
return arr;
}
return arr;
}
}
选择排序
package sort;
import java.util.Arrays;
public class SelectSort {
public static void main(String[] args) {
int[] arr={2,3,6,2,1,1,12,7};
int[] res = selectSort(arr);
System.out.println(Arrays.toString(res));
}
public static int[] selectSort(int[] arr){
int n=arr.length;
if(arr==null||n<=1)
return arr;
for (int i = 0; i < n-1; i++) {
int min=i;
for (int j = i+1; j < n; j++) {
if(arr[min]>arr[j])
min=j;
}
int temp=arr[i];
arr[i]=arr[min];
arr[min]=temp;
}
return arr;
}
}
插入排序
package sort;
import java.util.Arrays;
public class InsertSort {
public static void main(String[] args) {
int[] arr={12,7,6,2,1};
int[] res = insertSort(arr);
System.out.println(Arrays.toString(res));
}
public static int[] insertSort(int[] arr){
if(arr==null||arr.length<2)
return arr;
int n=arr.length;
for (int i = 1; i <n; i++) {
int temp=arr[i];
int k=i-1;
while(k>=0&&temp<=arr[k]){
k--;
}
for (int j = i; j >k+1; j--) {
arr[j]=arr[j-1];
}
arr[k+1]=temp;
}
return arr;
}
}
快速排序
package sort;
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] arr={12,3,5,7,1,2};
quickSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int[] arr){
quickSort(arr,0,arr.length-1);
}
private static void quickSort(int[] arr,int low,int high){
if(low>=high) return;
int pivot=partition(arr,low,high);
quickSort(arr,low,pivot-1);
quickSort(arr,pivot+1,high);
}
private static int partition(int[] arr,int low,int high){
int pivot=arr[low];
while(low<high){
while(low<high&&arr[high]>=pivot){
high--;
}
arr[low]=high;
while(low<high&&arr[low]<=pivot){
low++;
}
arr[high]=arr[low];
}
arr[low]=pivot;
return low;
}
}
希尔排序
package sort;
import java.util.Arrays;
public class ShellSort {
public static void main(String[] args)
{
int[] ins = {2,3,5,1,23,6,78,34,23,4,5,78,34,65,32,65,76,32,76,1,9};
int[] res = shellSort(ins);
System.out.println(Arrays.toString(res));
}
public static int[] shellSort(int[] arr){
int n=arr.length;
int gap=n/2;
while(gap>0){
for (int i = gap; i <n ; i++) {
int j=i;
while(j>=gap&&arr[j-gap]>arr[j]){
int temp=arr[j];
arr[j]=arr[j-gap];
arr[j-gap]=temp;
j-=gap;
}
}
gap/=2;
}
return arr;
}
}
计数排序
package sort;
import java.util.Arrays;
public class CountSort {
public static void main(String[] args) {
int[] array = new int[] {95,94,91,98,99,90,99,93,91,92};
int[] sortedArray = countSort(array);
System.out.println(Arrays.toString(sortedArray));
}
public static int[] countSort(int[] arr){
int n=arr.length;
int min=Integer.MAX_VALUE;
int max=Integer.MIN_VALUE;
for (int i = 0; i < n; i++) {
if(arr[i]>max)
max=arr[i];
if(arr[i]<min)
min=arr[i];
}
int d=max-min;
int[] countArray=new int[d+1];
for (int i = 0; i <n ; i++) {
countArray[arr[i]-min]++;
}
int sum=0;
for (int i = 0; i < countArray.length; i++) {
sum+=countArray[i];
countArray[i]=sum;
}
int[] sortedArray=new int[n];
for (int i = arr.length-1 ; i >= 0; i--) {
sortedArray[countArray[arr[i]-min]-1]=arr[i];
countArray[arr[i]-min]--;
}
return sortedArray;
}
}
堆排序
package sort;
import java.util.Arrays;
public class HeapSort {
public static void main(String[] args) {
int[] arr = new int[]{1, 3, 5,2, 0,10,6};
arr = heapSort(arr, arr.length);
System.out.println(Arrays.toString(arr));
}
private static int[] downAdjust(int[] arr,int parent,int length){
int temp=arr[parent];
int child=2*parent+1;
while(child<length){
if(child+1<length&&arr[child]>arr[child+1]){
child++;
}
if(temp<=arr[child])
break;
arr[parent]=arr[child];
parent=child;
child=2*parent+1;
}
arr[parent]=temp;
return arr;
}
public static int[] heapSort(int[] arr,int length){
for (int i = (length-2)/2; i >=0;i--) {
arr=downAdjust(arr,i,length);
}
for (int i = length-1; i >=1 ; i--) {
int temp=arr[i];
arr[i]=arr[0];
arr[0]=temp;
arr=downAdjust(arr,0,i);
}
return arr;
}
}
桶排序
package sort;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
public class BucketSort {
public static void main(String[] args) {
double[] array = new double[] {4.12,6.421,0.0023,3.0,2.123,8.122,4.12, 10.09};
double[] sortedArray = bucketSort(array);
System.out.println(Arrays.toString(sortedArray));
}
public static double[] bucketSort(double[] arr){
double max=arr[0];
double min=arr[0];
for (int i = 1; i < arr.length; i++) {
if(arr[i]>max)
max=arr[i];
if(arr[i]<min)
min=arr[i];
}
double d=max-min;
int bucketNum=arr.length;
ArrayList<LinkedList<Double>> bucketList=new ArrayList<LinkedList<Double>>(bucketNum);
for (int i = 0; i < bucketNum; i++) {
bucketList.add(new LinkedList<Double>());
}
for (int i = 0; i < arr.length; i++) {
int num=(int)((arr[i]-min)/(d/(bucketNum-1)));
bucketList.get(num).add(arr[i]);
}
for (int i = 0; i < bucketList.size(); i++) {
Collections.sort(bucketList.get(i));
}
double[] sortedArray=new double[arr.length];
int index=0;
for(LinkedList<Double> list:bucketList){
for(double element:list){
sortedArray[index++]=element;
}
}
return sortedArray;
}
}
归并排序
package sort;
import java.util.Arrays;
public class InternalMergeSort {
public static void main(String[] args) {
int[] arr={12,1,7,2,3,8};
intervalMergeSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void intervalMergeSort(int[] arr){
int[] temp=new int[arr.length];
intervalMergeSort(arr,temp,0,arr.length-1);
}
private static void intervalMergeSort(int[] arr,int[] temp,int left,int right){
if(left<right){
int mid=(left+right)/2;
intervalMergeSort(arr,temp,left,mid);
intervalMergeSort(arr,temp,mid+1,right);
mergeSortedArray(arr,temp,left,mid,right);
}
}
private static void mergeSortedArray(int[] arr,int[] temp,int left,int mid,int right){{
int i=left;
int j=mid+1;
int k=0;
while(i<=mid&&j<=right){
temp[k++]=arr[i]<arr[j]?arr[i++]:arr[j++];
}
while(i<=mid){
temp[k++]=arr[i++];
}
while(j<=right){
temp[k++]=arr[j++];
}
for (int l = 0; l < k; l++) {
arr[left+l]=temp[l];
}
}
}
}
基数排序
package sort;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
public class RadixSort {
public static void main(String[] args) {
int[] arr={12,7,6,2,1,22,23,611};
int[] res = radixSort(arr);
System.out.println(Arrays.toString(res));
}
public static int[] radixSort(int[] arr) {
if(arr == null || arr.length < 2) return arr;
int n = arr.length;
int max = arr[0];
for (int i = 1; i < n; i++) {
if(max < arr[i]) max = arr[i];
}
int num = 1;
while (max / 10 > 0) {
num++;
max = max / 10;
}
ArrayList<LinkedList<Integer>> bucketList = new ArrayList<>(10);
for (int i = 0; i < 10; i++) {
bucketList.add(new LinkedList<Integer>());
}
for (int i = 1; i <= num; i++) {
for (int j = 0; j < n; j++) {
int radio = (arr[j] / (int)Math.pow(10,i-1)) % 10;
bucketList.get(radio).add(arr[j]);
}
int k = 0;
for (int j = 0; j < 10; j++) {
for (Integer t : bucketList.get(j)) {
arr[k++] = t;
}
bucketList.get(j).clear();
}
}
return arr;
}
}