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;
}
}
手写不易,且赞且珍惜!