快速排序代码
package com.hainiu;
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] arr = {1,5,9,7,8,2};
qsort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
private static void qsort(int[] arr, int start, int end) {
int mid =0;
if(start>=end){
return;
}else{
mid = getIndex(arr,start,end);
qsort(arr,start,mid-1);
qsort(arr,mid+1,end);
}
}
private static int getIndex(int[] arr, int start, int end) {
int midValue = arr[start];
while(start<end){
while(arr[end]>midValue && start<end){
end--;
}
arr[start] = arr[end];
arr[end] = midValue;
while(arr[start]<midValue && start<end){
start++;
}
arr[end] = arr[start];
arr[start] = midValue;
}
return start;
}
}
归并排序代码
package com.hainiu;
import java.util.Arrays;
public class SplitSort {
public static void main(String[] args) {
int [] arr = {9,6,3,4,8,5,1,2,0};
splitArr(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
private static void splitArr(int[] arr, int start, int end) {
int mid = 0;
//起始位置和终止位置相同了就结束拆分,说明就一个元素了
if(start >= end){
return;
}else{
mid =(start+end)/2;
splitArr(arr,start,mid);
splitArr(arr,mid+1,end);
mergeSort(arr,start,end,mid);
}
}
/**
*
* @param arr 小数组
* @param start 起始位置
* @param end 终止位置
* @param mid 中间位置
* @return 合并后的数据集
*/
private static void mergeSort(int[] arr, int start, int end, int mid) {
int[] newArr = new int[arr.length];
int start1 = start;
int end1 = mid;
int start2 = mid+1;
int end2 = end;
int index = start;
while(start1<=end1 && start2<=end2){
if(arr[start1]<=arr[start2]){
newArr[index] = arr[start1];
start1++;
index++;
}else{
newArr[index] = arr[start2];
start2++;
index++;
}
}
while(start1<=end1){
newArr [index] = arr[start1];
index++;
start1++;
}
while(start2<=end2){
newArr [index] = arr[start2];
index++;
start2++;
}
for(int i =start;i<=end;i++){
arr[i] = newArr[i];
}
}
}