Java程序员面试必备排序算法

20分钟手写6大常考面试排序算法:由于是手写,不耽搁时间,自己练手的,就不写注解了。

1、选择排序

//选择排序
public static void selectSort(int[] arr){

	for(int i = 0;i<arr.length-1;i++){

		for(int j = i+1;j<arr.length;j++){

			if(arr[i] > arr[j]){
				int temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
	}
}

2、冒泡排序


//冒泡排序
public static 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;

			}
		}
	}
}

3、快速排序(递归+分治)


//快速排序
public static void quickSort(int[] arr,int _left,int _right){

	int left = _left;
	int right = _right;
	int temp = 0;

	if(left <= right){

		temp  = arr[left];

		while(left!=right){

			while(rigth > left && arr[right] >= temp){
				right--;
			}
			arr[left] = arr[right];

			while(left < right && arr[left] <= temp){
				left++;
			}

			arr[right] = arr[left];
		}
		arr[right] = temp;
		quickSort(arr,_left,left-1);
		quickSort(arr,right+1,_right);
	}
}

4、归并排序(递归+分治法)

//归并排序

public static int[] gbSort(int[] arr,int low,int high){

	int mid = (low+high)/2;

	if(low < high){

		gbSort(arr,low,mid);
		gbSort(arr,mid+1,high);
		merge(arr,low,mid,high);
	}

	return arr;
}

public static void merge(int[] arr,int low,int mid,int high){

	int[] temp = new int[high-low+1];
	int i = low;
	int j = mid+1;
	int k = 0;

	while(i<=mid && j<=high){

		if(arr[i] < arr[j]){
			temp[k++] = arr[i++];
		}else {
			temp[k++] = arr[j++];
		}


	}

	while(i<=mid){
		temp[k++] = arr[i++];
	}

	while(j<=high){
		temp[k++] = arr[j++];
	}

	for(int x = 0;x<temp.length;x++){

		arr[x+low] = temp[x];
	}
}

5、插入排序

//插入排序

public static void inserSort(int[] arr){

	int temp = 0;
	for(int i = 1;i<arr.length;i++){

		temp = arr[i];

		for(int j = i-1j>=0;j--){
			if(arr[j]>temp){
				arr[j+1] = arr[j];
			}else{
				break;
			}
		}

	arr[j+1] = temp;
	}

}

6、二分查找

//二分查找
public static void binartSearch(int[] arr,int key){


		int low = 0;
		int high = arr.length-1;

		while(low<=high){

			int mid = (low+high)/2;
			
			if(arr[mid] == key){
				return mid;
			}else if(key < arr[mid]){
				high = mid-1;
			}else{
				low = mid+1;
			}
			return -1;
		}
}

手写不易,且赞且珍惜!

猜你喜欢

转载自blog.csdn.net/qq_40903237/article/details/94964074