//冒泡排序
public static int[] Sort(int [] arr) {
if(arr ==null||arr.length==0) return null;
for(int i = 0 ; i <arr.length;i++) {
for(int j = 0;j<arr.length-i-1;j++) {
if(arr[j+1]<arr[j]) {
int tmp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = tmp;
}
}
}
return arr;
}
//插入排序
public static int[] insertSort(int[] arr) {
if(arr==null||arr.length==0) return null;
for(int i = 0 ;i<arr.length;i++) {
int cur = arr[i];
int preIndex = i-1;
while(preIndex>=0&&cur<arr[preIndex]) {
arr[preIndex+1] = arr[preIndex];
preIndex--;
}
arr[preIndex+1]=cur;
}
return arr;
}
// 希尔排序
public static int[] shellSort(int[] arr) {
if (arr == null || arr.length == 0) return null;
int gap = arr.length / 2;
while(gap!=0) {
for(int i = 0 ; i <arr.length;i++) {
int cur = arr[i];
int preIndex = i-gap;
while(preIndex>=0&&cur<arr[preIndex]) {
arr[preIndex+gap] =arr[preIndex];
preIndex-=gap;
}
arr[preIndex+gap] = cur;
}
gap/=2;
}
return arr;
}
//快速排序
public static int[] quickSort(int[] arr, int start, int end) {
if (arr == null || arr.length == 0 || start < 0 || end > arr.length || start > end) return null;
int i = start;
int j = end;
int pivot = arr[start];
while (i != j) {
while (i < j && pivot <= arr[j]) {
j--;
}
while (i < j && pivot >= arr[i]) {
i++;
}
// 交换ij
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
// 相遇交换
arr[start]=arr[i];
arr[i] = pivot;
quickSort(arr, start, j-1);
quickSort(arr, j+1, end);
return arr;
}
//归并排序
private static void mergeSort(int[] arr, int start, int end) {
if(start>=end) return;
int mid = (start + end )/2;
mergeSort(arr, start, mid);
mergeSort(arr, mid+1, end);
merge(arr,start,mid,end);
}
private static void merge(int[] arr, int start, int mid, int end ) {
int i = start;
int j = mid+1;
int[] tmp = new int[arr.length];
int t =0;
while(i<=mid&&j<=end) {
if(arr[i]>=arr[j]) {
tmp[t++]=arr[j++];
}else {
tmp[t++] = arr[i++];
}
}
while(i<=mid) {
tmp[t++] = arr[i++];
}
while(j<=end) {
tmp[t++] = arr[j++];
}
t= 0 ;
int tmpL = start;
while(tmpL<=end) {
arr[tmpL++] = tmp[t++];
}
}
//选择排序
public static int[] selectSort(int [] arr) {
if(arr==null||arr.length==0) return null;
for(int i =0;i<arr.length;i++) {
int minIndex = i;
for(int j= i+1;j<arr.length;j++) {
if(arr[minIndex]>arr[j]) {
minIndex = j ;
}
}
int tmp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = tmp;
}
return arr;
}
//堆排序
public static int[] heapSort(int[] arr) {
if (arr == null || arr.length == 0)
return arr;
//从倒数第二排开始
for (int i = arr.length / 2 - 1; i >= 0; i--) {
heapify(arr, arr.length, i);
}
//从后往前排
for (int i = arr.length - 1; i >= 0; i--) {
swap(arr, i, 0);
heapify(arr, i, 0);//i=arr.length-1
}
return arr;
}
public static void heapify(int[] arr, int size, int i) {
int maxIndex = i;
int left = 2 * i + 1;
int right = 2 * i + 2;
if (left < size && arr[left] > arr[maxIndex]) {
maxIndex = left;
}
if (right < size && arr[right] > arr[maxIndex]) {
maxIndex = right;
}
if (maxIndex != i) {
swap(arr, i, maxIndex);
heapify(arr, size, maxIndex);
}
}
public static void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
都是自学的有错误还请大家指出,谢谢