合并排序:
package edu.xalead.Test;
public class Mergesort1 {
public static void sort(int a[]){
int l =0;
int r = a.length-1;
//归并
devide(a,l,r);
}
/**
* 归==>分治
*/
private static void devide(int a[],int left,int right){
//递归
int mid = (left + right)/2;
if(left<right) {
devide(a, left, mid);
devide(a, mid + 1, right);
//并
merge(a,left,mid,mid+1,right);
}
}
private static void merge(int a[], int left, int mid, int i, int right) {
int[] temp = new int[a.length];
int index = left; // 起始索引从自己开始
int ls = left, le = mid; // leftstart leftend
int rs = i, re = right;
//至少把一边的数组按顺序放入临时数组
while (ls <= le && rs <= re) {
// Comparable o1 = (Comparable) list.get(ls);
// Comparable o2 = (Comparable) list.get(rs);
if (a[ls] < a[rs]) { // o1<o2 retrun -1;
temp[index] = a[ls];
ls++;
} else {
temp[index] = a[rs]; // o1>=o2
rs++;
}
index++;
}
//判断左边是否有剩余元素
if (ls <= le) {
for (int j = ls; j <= le; j++) {
temp[index++] = a[j];
}
}
//判断右边是否有剩余元素
if (rs <= re) {
for (int j = rs; j <= re; j++) {
temp[index++] = a[j];
}
}
for (int j = left; j <= right; j++) {
a[j] = temp[j];
}
}
}
检测:
package edu.xalead.Test;
import edu.xalead.Iterator;
import edu.xalead.collection.Student;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class testCollection {
// @Test
// public void test1() {
// List<Student> list = new ArrayList<>();
//
// java.util.Collections.sort(list,
// (o1, o2) -> {
// if (o1 instanceof Student && o2 instanceof Student) {
// Student s1 = (Student) o1;
// Student s2 = (Student) o2;
//
// if (s1.getId() > s2.getId()) return 1;
// if (s1.getId() < s2.getId()) return -1;
// return 0;
// }
// throw new RuntimeException("类型不匹配无法比较");
//
// });
// }
//
// @Test
// public void test2() {
// List<Integer> s = new ArrayList<>();
//
// s.add(12);
// s.add(234);
// s.add(4354);
// s.add(46546);
// s.add(0);
// s.add(-124);
// //反转
// System.out.println(s);
// Collections.reverse(s);
// System.out.println(s);
// //从大到小排序
// Collections.sort(s);
// System.out.println(s);
// // 打乱
// Collections.shuffle(s);
// System.out.println(s);
// // 交换索引i和j的索引位置
// Collections.swap(s, 4, 1);
// System.out.println(s);
// // 旋转
// Collections.rotate(s, 3);
// System.out.println(s);
//
// // Collections.binarySearch();
//
// }
//
// @Test
// public void test3() {
// List s = new ArrayList();
// s.add(new Student(324324, "HAHA"));
// s.add(new Student(143543, "DAHA"));
// s.add(new Student(323545, "JAHA"));
// s.add(new Student(423545, "WAHA"));
//
// System.out.println("排序前: \n " + s);
// edu.xalead.Test.Collections.sort(s);
// System.out.println("排序后: \n" + s);
// }
//
//
// @Test
// public void test4(){
//
// List s = new ArrayList();
// s.add(12);
// s.add(34325);
// s.add(525);
// s.add(0);
// s.add(-241);
//
// System.out.println("排序前:\n" + s );
// edu.xalead.Test.Collections.sort(s);
// System.out.println("排序后: \n" + s);
//
//
// }
@Test
public void test5(){
int []a = {2432,6546,57,0,6,462,-5436,3564};
Mergesort1.sort(a);
for(int i=0;i<a.length;i++){
System.out.print(a[i] + " ");
}
}
}
测试结“: