冒泡排序 插入排序 选择排序 快速排序 归并排序 堆排序计数排序实现
import java.util.Arrays;
public class maopao {
public static void main(String[] args) {
int[] a = {7, 8,9,6,3,5,6,7};
maopao maopao = new maopao();
maopao.heapSort(a);
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
private void heapSort(int[] a) {
int n = a.length;
for(int i = (n-1-1)/2; i>=0; --i){
sink(a,i, n);
}
for(int i=n-1; i>=1;--i)
{
swap(a,0,i);
sink(a,0,i);
}
}
private void sink(int[] a, int i, int n) {
int j=0,temp = a[i];
while((j=((i<<1) + 1))<n){
if(j<n-1&&a[j]<a[j+1]) j++;
if(a[j]<=temp){
break;
}else{
a[i]=a[j];
i=j;
}
}
a[i]=temp;
}
private void countSort(int[] a) {
int n = a.length,maxp=0;
int[] b = new int[n];
for (int i = 0; i < n; i++) {
b[i]=a[i];
if(a[maxp]<a[i]){
maxp=i;
}
}
int m = a[maxp];
int[] c=new int[m+1];
for (int i = 0; i < n; i++) {
c[b[i]]++;
}
for (int i = 1; i <= m; i++) {
c[i]+=c[i-1];
}
for (int i = n-1; i >= 0 ; i--) {
a[c[b[i]]-1]=b[i];
c[b[i]]--;
}
}
int[] b = new int[100];
private void mergeSort(int[] a, int l, int r) {
if(l>=r) return;
int mid = (l+r)/2;
mergeSort(a,l,mid);
mergeSort(a,mid+1, r);
mergeTwoArray(a,b,l,mid,r);
}
private void mergeTwoArray(int[] a, int[] b, int l, int mid, int r) {
int i=l,j = mid+1,k=l;
while(i<=mid && j<=r)
{
if(a[i]<=a[j]){
b[k++]=a[i++];
}else{
b[k++]=a[j++];
}
}
while(i<=mid){
b[k++]=a[i++];
}
while(j<=r){
b[k++]=a[j++];
}
for (int m = l; m <= r; m++) {
a[m]=b[m];
}
}
private void quickSort(int[] a, int l, int r) {
if(l>=r) return;
int pos = partion(a,l,r);
quickSort(a,l,pos-1);
quickSort(a,pos+1,r);
}
private int partion(int[] a, int l, int r) {
int i=l,j=r,base=a[l];
while(i<j)
{
while(i<j && a[j]>=base) j--;
a[i]=a[j];
while(i<j && a[i]<=base) i++;
a[j]=a[i];
}
a[i] = base;
return i;
}
private void selectSort(int[] a) {
for (int i = 0; i < a.length - 1; i++) {
int minp=i;
for (int j = i+1; j < a.length; j++) {
if(a[minp]>a[j]) minp=j;
}
swap(a, i, minp);
}
}
private void insertSort(int[] a) {
for (int i = 1; i < a.length; i++) {
int j,temp = a[i];
for(j = i;j>=1;--j) {
if(a[j-1] > temp){
a[j] = a[j-1];
}else break;
}
a[j]=temp;
}
}
private void sort(int[] a) {
for (int i = 1; i <= a.length - 1; i++) {
for (int j = a.length-1; j >=i; j--) {
if(a[j] < a[j-1]){
swap(a,j,j-1);
}
}
}
}
private void swap(int[] a, int j, int i) {
int temp=a[i];
a[i] = a[j];
a[j]=temp;
}
}