多种排序主体思路方法
(父方法)
public abstract class Sort {
public int[] arr;
public Sort(){}
public Sort(int[] arr){
this.arr=new int[arr.length];
for(int i=0;i<arr.length;i++){
this.arr[i]=arr[i];
}
}
public abstract void sort();
public void swap(int i,int j){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
选择排序
import java.util.Arrays;
//O(n^2)
//S(1)
//不稳定
//选择排序
public class SelectionSort extends Sort{
public SelectionSort(int[] arr){
super(arr);
}
@Override
public void sort() {
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
swap(i,j);
}
}
}
System.out.println(Arrays.toString(arr));
}
}
冒泡排序
import java.util.Arrays;
//冒泡排序
//O(n^2)
//S(1)
//稳定,两两比较排序
//从最大开始先找到
public class BubbleSort extends Sort{
public BubbleSort(int[] arr) {
super(arr);
}
@Override
public void sort() {
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]){
swap(j,j+1);
}
}
}
System.out.println(Arrays.toString(arr));
}
}
插入排序
import java.util.Arrays;
//插入排序 O(n^2) S(1) 稳定
//从后向前走进行排序
public class InsertionSort extends Sort{
public InsertionSort(int[] arr){
super(arr);
}
@Override
public void sort() {
for(int i=1;i<arr.length;i++){
int e=arr[i];
int j=0;
for(j=i;j>0&&arr[j-1]>e;j--){
arr[i]=arr[j-1];
}
arr[j-1]=e;
}
System.out.println(Arrays.toString(arr));
}
}
希尔排序
import java.util.Arrays;
//希尔排序 O(n^1.3) S(1) 不稳定
public class ShellSort extends Sort {
public ShellSort(int[] arr) {
super(arr);
}
@Override
public void sort() {
int len = arr.length;
for (int gap = len / 2; gap > 0; gap = gap / 2) {
for (int i = gap; i < len; i++) {
int e = arr[i];
int j = i;
while (j - gap >= 0 && arr[j - gap] > e) {
arr[j] = arr[j - gap];
j = j - gap;
}
arr[j] = e;
}
}
System.out.println(Arrays.toString(arr));
}
}