Comparable接口
public class Student implements Comparable<Student>{
private String usename;
private int age;
public String getUsename() {
return usename;
}
public void setUsename(String usename) {
this.usename = usename;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"usename='" + usename + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(Student o) {
return this.getAge() - o.getAge();
}
}
public class test {
public static void main(String[] args) {
Student s1 = new Student();
s1.setUsename("张三");
s1.setAge(18);
Student s2 = new Student();
s2.setUsename("李四");
s2.setAge(20);
Comparable max = getmax(s1, s2);
System.out.println(max);
}
public static Comparable getmax(Comparable c1, Comparable c2){
int result = c1.compareTo(c2);
if(result >= 0){
return c1;
}else{
return c2;
}
}
}
冒泡排序
public class Bubble {
public static void sort(Comparable[] arr){
for (int i = arr.length - 1; i > 0; i--) {
for (int j = 0; j < i; j++) {
if (greater(arr[j], arr[j + 1])){
exch(arr, j, j + 1);
}
}
}
}
public static boolean greater(Comparable c1, Comparable c2){
return c1.compareTo(c2) > 0;
}
public static void exch(Comparable[] arr, int i, int j){
Comparable temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
Integer[] arr = {8, 7, 6, 5, 4, 3, 2, 1};
Bubble.sort(arr);
System.out.println(Arrays.toString(arr));
}
}
选择排序
public class Selection {
public static void sort(Comparable arr[]){
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if(greater(arr[minIndex], arr[j])){
minIndex = j;
}
}
exch(arr, i, minIndex);
}
}
public static boolean greater(Comparable c1, Comparable c2){
return c1.compareTo(c2) > 0;
}
public static void exch(Comparable arr[], int i, int j){
Comparable temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
Integer[] arr = {5, 4, 3, 2, 1};
sort(arr);
System.out.println(Arrays.toString(arr));
}
}
插入排序
public class Insertion {
public static void sort(Comparable arr[]){
int i,j;
for (i = 1; i < arr.length; i++) {
if (greater(arr[i - 1], arr[i])){
Comparable a = arr[i];
for (j = i - 1; j >= 0; j--) {
if (greater(arr[j], a)){
arr[j + 1] = arr[j];
}else{
break;
}
}
arr[j + 1] = a;
}
}
}
public static boolean greater(Comparable c1, Comparable c2){
return c1.compareTo(c2) > 0;
}
public static void main(String[] args) {
Integer[] arr = {5, 4, 7, 8, 6, 3, 2, 1};
sort(arr);
System.out.println(Arrays.toString(arr));
}
}
public class Insertion2 {
public static void sort(Integer arr[]){
int i,j;
for (i = 1; i < arr.length; i++) {
if (arr[i - 1] > arr[i]){
Integer a = arr[i];
for (j = i - 1; j >= 0; j--) {
if (arr[j] > a){
arr[j + 1] = arr[j];
}else{
break;
}
}
arr[j + 1] = a;
}
}
}
public static void main(String[] args) {
Integer[] arr = {5, 4, 7, 8, 6, 3, 2, 1};
sort(arr);
System.out.println(Arrays.toString(arr));
}
}
希尔排序
public class Shell {
public static void sort(Integer[] arr){
int i, j;
for (int h = arr.length / 2; h >= 1; h /= 2){
for(i = h; i < arr.length; i++){
if (arr[i - h] > arr[i]){
Integer a = arr[i];
for (j = i - h; j >= 0; j -= h){
if (arr[j] > a){
arr[j + h] = arr[j];
}else{
break;
}
}
arr[j + h] = a;
}
}
}
}
public static void main(String[] args) {
Integer[] arr = {8, 5, 7, 6, 4, 2, 1, 3};
sort(arr);
System.out.println(Arrays.toString(arr));
}
}
归并排序
- 搞了好久,第一个while循环的右括号加错地方了。。。
public class mergeSort {
private static Integer[] arr;
public static void mergesort(Integer[] a){
arr = new Integer[a.length];
int low = 0;
int high = a.length - 1;
mergesort(a, low, high);
}
private static void mergesort(Integer[] a, int low, int high) {
if (low >= high){
return;
}
int mid = (low + high) / 2;
mergesort(a, low, mid);
mergesort(a, mid + 1, high);
merge(a, low, mid, high);
}
private static void merge(Integer[] a, int low, int mid, int high) {
int i = low;
int j = mid + 1;
int k = low;
while (i <= mid && j <= high) {
if (a[i] <= a[j]) {
arr[k++] = a[i++];
} else {
arr[k++] = a[j++];
}
}
while (i <= mid){
arr[k++] = a[i++];
}
while (j <= high){
arr[k++] = a[j++];
}
for (int l = low; l <= high; l++) {
a[l] = arr[l];
}
}
public static void main(String[] args) {
Integer[] a = { 8, 7, 6, 5, 4, 2, 3, 1 };
mergesort(a);
System.out.println(Arrays.toString(a));
}
}
快速排序
public class quick {
public static void sort(Integer[] arr){
int low = 0;
int high = arr.length - 1;
sort(arr, low, high);
}
private static void sort(Integer[] arr, int low, int high){
if (low >= high){
return;
}
int partition = Partition(arr, low, high);
sort(arr, low, partition - 1);
sort(arr, partition + 1, high);
}
private static int Partition(Integer[] arr, int low, int high) {
int pivot = arr[low];
while (low < high) {
while (low < high && arr[high] >= pivot){
high--;
}
arr[low] = arr[high];
while (low < high && arr[low] <= pivot){
low++;
}
arr[high] = arr[low];
}
arr[high] = pivot;
return high;
}
public static void main(String[] args) {
Integer[] arr = {4, 6, 8, 7, 2, 1, 3, 5};
sort(arr);
System.out.println(Arrays.toString(arr));
}
}