程序员面试题:排序和查找的实现(JAVA版)

1、排序

class Sort {
	//选择排序
	void selectionsort(int array[], int low, int high){
		for(int i = low; i <= high-1; i++){
			for(int j = i+1; j <=high; j++){
				if(array[i] > array[j])
				{
					int temp = array[i];
					array[i] = array[j];
					array[j] = temp;
				}
			}
		}
	}
	//冒泡排序
	void bubblesort(int array[],int length){
		for(int i = 0; i <= length-1; i++){
			for(int j = 0; j <= length-i-1; j++){
				if(array[j] > array[j+1]){
					int temp = array[j+1];
					array[j+1] = array[j];
					array[j] = temp;
				}
			}
		}
	}
	//归并排序
	void mergesort(int array[], int low, int high){
		if(low < high){
			int middle = (low + high)/2;
			mergesort(array, low, middle);
			mergesort(array, middle+1, high);
			merge(array, low, middle, high);
		}
	}
	void merge(int array[], int low, int mid, int high){
		int helper[] = new int[array.length];
		for(int i = low; i < high; i++){
			helper[i] = array[i];
		}
		int current = low;
		int helperLeft = low;
		int helperRight = mid+1;
		while(helperLeft <= mid && helperRight <= high){
			if(helper[helperLeft] <= helper[helperRight]){
				array[current++] = helper[helperLeft++];
			}else{
				array[current++] = helper[helperRight++];
			}
		}
		int remain = mid - helperLeft;
		for(int i = 0; i <= remain; i++){
			array[current + i] = helper[helperLeft+i];
		}
	}
	//快速排序
	void quicksort(int array[], int left, int right){
		int index = partition(array, left, right);
		if(left < index-1){
			quicksort(array, left, index-1);
		}else{
			quicksort(array, index, right);
		}
	}
	int partition(int array[], int left, int right){
		int piovt = array[(left+right)/2];
		while(left < right){
			while(array[left] < piovt) left++;
			
			while(array[right] > piovt) right--;
			
		    if(left <= right){
		    	int temp = array[left];
			    array[left] = array[right];
			    array[right] = temp;
			    left++;
			    right--;
		    }
		}
		return left;	
	}
	
}

2、查找

class Search {
	int binarySearch(int a[], int x){
		int low = 0;
		int high = a.length - 1;
		int mid;
		while(low <= high){
			mid = (low + high)/2;
			if(a[mid] > x){
				low = mid + 1;
			}else if(a[mid] < x){
				high = mid - 1;
			}else{
				return mid;
			}
		}
		return -1;
	}
}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值