常见的排序算法--冒泡排序--选择排序--二分排序--插入排序--归并排序--快速排序

1.冒泡排序:

public static void bubbleSort(int[] arr) {
		int temp;
		for(int i=0;i<arr.length;i++) {
			for(int j=i+1;j<arr.length;j++) {
				if(arr[i]>arr[j]) {
					temp=arr[i];
					arr[i]=arr[j];
					arr[j]=temp;
				}
			}
		}
		
	}

2.选择排序

public static void selectSort(int[] arr) {
		int temp;
		for(int i=0;i<arr.length;i++) {
			int min=i;
			//选出该轮比较中最小的数
			for(int j=i+1;j<arr.length;j++) {
				//用每次选出的最小值和接下来的数进行比较.
				if(arr[min]>arr[j]) {
					min=j;
				}
			}
			//相比冒泡排序,减少交换数据的次数,提高效率
			if(min!=i) {
				temp=arr[i];
				arr[i]=arr[min];
				arr[min]=temp;
			}
		}
	}

3.二分排序

public static void binarySort(int[] arr) {
		int len=arr.length;
		int key=0;
		int low=0,high=0,mid=0;
		for(int i=0;i<len;i++) {
			key=arr[i];
			low=0;
			high=i-1;
			while(low<=high) {
				mid=(low+high)/2;
				if(key<arr[mid])
					high=mid-1;
				else
					low=mid+1;
			}
			for(int j=i-1;j>high;j--) {
				arr[j+1]=arr[j];
			}
			arr[high+1]=key;
		}
	}

4.插入排序

public static void insertSort(int[] arr) {
		for(int i=1;i<arr.length;i++) {
			int cur=arr[i];
			int m=i;
			for(int j=i-1;j>=0;j--) {
				if(arr[j]>cur) {
					arr[j+1]=arr[j];
					m=j;
				}
				else
					break;
			}
			arr[m]=cur;
		}
	}

5.归并排序

public static void mergeSort(int[] arr,int left,int right) {
		if(left>=right)
			return;
		int mid=(left+right)/2;
		mergeSort(arr,left,mid);
		mergeSort(arr,mid+1,right);
		merge(arr,left,mid,right);
	}
public static void merge(int[] arr,int left,int mid,int right) {
		int[] temp=new int[arr.length];
		int left2=mid+1;
		int start=left;
		int startCopy=left;
		while(left<=mid && left2<=right) {
			if(arr[left]<=arr[left2]) {
				temp[start++]=arr[left++];
			}else {
				temp[start++]=arr[left2++];
			}
		}
		while(left<=mid) {
			temp[start++]=arr[left++];
		}
		while(left2<=right) {
			temp[start++]=arr[left2++];
		}
		while(startCopy<=right) {
			arr[startCopy]=temp[startCopy];
			startCopy++;
		}
	}

6.快速排序

public static void quickSort(int[] arr,int l,int r) {
		if(l<r) {
			int x=arr[l];
			int i=l,j=r;
			while(i<j) {
				while(i<j && arr[j]>x) {
					j--;
				}
				if(i<j) {
					arr[i]=arr[j];
					i++;
				}
				while(i<j && arr[i]<x) {
					i++;
				}
				if(i<j) {
					arr[j]=arr[i];
					j--;
				}
			}
			arr[i]=x;
			quickSort(arr,l,i);
			quickSort(arr,i+1,r);
		}
	}

测试代码:

public static void printArr(int[] arr) {
		for(int a:arr) {
			System.out.print(a+"\t");
		}
	}

public static void main(String[] args) {
    int[] arr= {3,2,7,9,5,10,8,4,1};
		//bubbleSort(arr);
        //printArr(arr);
		//selectSort(arr);
        //printArr(arr);
		//quickSort(arr,0,arr.length-1);
        //printArr(arr);
		//binarySort(arr);
        //printArr(arr);
		//insertSort(arr);
        //printArr(arr);
		mergeSort(arr,0,arr.length-1);
		printArr(arr);
}

 

点赞