1.冒泡排序
public void bubbleSort(int[] arr) {
for(int i=0; i<arr.length-1; i++) {
for(int j=0; j<arr.length-i-1; j++) {
if(arr[j]>arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
2.选择排序
public void selectSort(int[] arr) {
for(int i=0; i<arr.length-1; i++) {
int min = i;
for(int j=i+1; j<arr.length; j++) {
if(arr[j]<arr[min]) {
min = j;
}
}
if(min!=i) {
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
}
3.直接插入排序
public void insertSort(int[] arr) {
int temp,j;
for(int i=1; i<arr.length; i++) {
temp = arr[i];
j = i-1;
while(j>=0&&temp<arr[j]) {
arr[j] = arr[j-1];
j--;
}
arr[j+1] = temp;
}
}
4.希尔排序
public void shellSort1(int[] arr){
int length = arr.length;
for(int gap=length/2; gap>0; gap/=2) {
for(int j=gap; j<length; j++) {
if(arr[j]<arr[j-gap]) {
int k = j;
int temp = arr[j];
while(k-gap>=0&&temp<arr[k-gap]) {
arr[k] = arr[k-gap];
k-=gap;
}
arr[k] = temp;
}
}
}
}
public void shellSort2(int[] arr){
int length = arr.length;
for(int gap=length/2; gap>0; gap/=2) {
for(int j=gap; j<length; j++) {
if(arr[j]<arr[j-gap]) {
int k = j;
while(k-gap>=0&&arr[k]<arr[k-gap]) {
int temp = arr[k];
arr[k] = arr[k-gap];
arr[k-gap] = temp;
}
}
}
}
}
5.快速排序(双指针)
public void quickSort(int[] arr,int left,int right) {
if(left>=right)
return;
int start = left;
int end = right;
int temp = arr[start];
while(start<end) {
while(start<end&&arr[end]>=temp)
end--;
if(start<end)
arr[start++] = arr[end];
while(start<end&&arr[start]<temp)
start++;
if(start<end)
arr[end--] = arr[start];
}
arr[start] = temp;
quickSort(arr, left, start-1);
quickSort(arr, start+1, right);
}
6.归并排序
public void mergeSort(int[] arr,int left,int right) {
if(left>=right)
return;
int mid = left+(right-left)/2;
mergeSort(arr, left, mid);
mergeSort(arr, mid+1, right);
merge(arr,left,mid,right);
}
public void merge(int[] arr,int left,int mid,int right) {
int t1 = left;
int t2 = mid+1;
int k = 0;
int[] temp = new int[right-left+1];
while(t1<=mid&&t2<=right) {
if(arr[t1]<arr[t2])
temp[k++] = arr[t1++];
else
temp[k++] = arr[t2++];
}
while(t1<=mid)
temp[k++] = arr[t1++];
while(t2<=right)
temp[k++] = arr[t2++];
for(int i=0; i<k; i++) {
arr[left++] = temp[i];
}
}
7.基数排序
public void baseSort(int[] arr) {
int[][] bucket = new int[10][arr.length];
int[] bucketCounts = new int[10];
int max = arr[0];
for(int i=0; i<arr.length; i++)
if(arr[i]>max)
max = arr[i];
int maxLength = (max+"").length();
int n = 1;
for(int i=1; i<=maxLength; i++) {
for(int j=0; j<arr.length; j++) {
int temp = (arr[j]/n)%10;
bucket[temp][bucketCounts[temp]] = arr[j];
bucketCounts[temp]++;
}
int index = 0;
for(int j=0; j<bucketCounts.length; j++) {
int count = bucketCounts[j];
for(int k=0; k<count; k++) {
arr[index++] = bucket[j][k];
}
bucketCounts[j] = 0;
}
n*=10;
}
}
8.堆排序
public void heapSort(int[] arr) {
for(int i=(arr.length-1-1)/2; i>=0; i--) {
adjustHeap(arr, i, arr.length);
}
for(int i=arr.length-1; i>0; i--) {
int temp = arr[i];
arr[i] = arr[0];
arr[0] = temp;
adjustHeap(arr, 0, i);
}
}
public void adjustHeap(int[] arr,int parent,int length) {
int temp = arr[parent];
int lchild = 2*parent+1;
while(lchild<length) {
int rchild = lchild+1;
if(rchild<length&&arr[rchild]>arr[lchild])
lchild++;
if(temp>=arr[lchild])
break;
arr[parent] = arr[lchild];
parent = lchild;
lchild = 2*lchild+1;
}
arr[parent] = temp;
}