程序员面试题:排序和查找的实现(JAVA版)
来源:互联网 发布:分润系统源码 编辑:程序博客网 时间:2024/06/18 18:18
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
- 程序员面试题:排序和查找的实现(JAVA版)
- 程序员面试题:常见数据结构的实现(JAVA版)
- 程序员面试题精选(10):在排序数组中查找和为给定值的两个数字
- 程序员面试题精选(1):把二元查找树转变成排序的双向链表
- PHP算法面试题 排序和查找
- java基础面试题--二分查找思想的Java实现
- 程序员面试题精选100题(10)-在排序数组中查找和为给定值的两个数字
- 程序员面试题精选(10)-在排序数组中查找和为给定值的两个数字
- 程序员面试题精选(10)-在排序数组中查找和为给定值的两个数字
- 程序员面试题精选100题(10)-在排序数组中查找和为给定值的两个数字
- 程序员面试题精选100题(10)-在排序数组中查找和为给定值的两个数字
- 程序员面试题精选100题(10)-在排序数组中查找和为给定值的两个数字
- 程序员面试题--堆排序的C语言实现
- 程序员面试题精选(01)-把二元查找树转变成排序的双向链表
- 程序员面试题精选(01)-把二元查找树转变成排序的双向链表
- 程序员面试题精选---01 把二元查找树转变成排序的双向链表
- 剑指offer面试题3 二维数组的查找(java实现)
- 面试题实现--(百度的不存在数查找问题)
- RequestMapping的相关知识讲解(补)
- Windows2008 R2服务器配置TLS1.2方法
- 【EJB】Developing EJB Applications -- Chapter 2(创建企业级Bean项目)
- PAT A1086
- 孙云球(二分枚举)(AOJ 851)
- 程序员面试题:排序和查找的实现(JAVA版)
- Android 编译错误:unreachable statement
- PHP发送邮件
- 前缀++和后缀++
- 【数码管/定时器/中断】一个定时器控制数码管显示
- 判断序列是否为正确的出栈序列
- InSAR Processing Wiki
- 浅析TCP与UDP
- DeepLearning tutorial——CNN卷积神经网络应用于人脸识别(详细流程+代码实现)