java排序演算法(你必須會的常見排序演算法)
阿新 • • 發佈:2019-01-03
1、排序演算法說明
1、排序的定義
對一序列物件根據某個關鍵字進行排序
2、術語說明
- 穩定:如果a原本在b前面,而a=b,排序之後a仍然在b的前面;
- 不穩定:如果a原本在b的前面,而a=b,排序之後a可能會出現在b的後面;
- 內排序:所有排序操作都在記憶體中完成;
- 外排序:由於資料太大,因此把資料放在磁碟中,而排序通過磁碟和記憶體的資料傳輸才能進行;
- 時間複雜度: 一個演算法執行所耗費的時間。
- 空間複雜度:執行完一個程式所需記憶體的大小
3、 演算法總結
4、演算法分類
二、常見演算法得實現程式碼
1.氣泡排序
package test.allSort; import java.util.Arrays; /** * @author Mrqian * @time 2018-12-25 * 氣泡排序 * */ public class MaoPao { public static void main(String[] args) { int [] arr= {1,5,8,2,7,257,853,7,357,537,687,36,73,47}; maopao(arr); System.out.println(Arrays.toString(arr)); } public static void maopao(int [] arr) { for(int i=0;i<arr.length;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; } } } } }
2、選擇排序
package test.allSort; import java.util.Arrays; /** * @author Mrqian * @time 2018-12-25 * 選擇排序 * */ public class ChooseSort { public static void main(String[] args) { int [] arr= {1,5,8,2,7,257,853,7,357,537,687,36,73,47}; choose(arr); System.out.println(Arrays.toString(arr)); } public static void choose(int [] arr) { for(int i=0;i<arr.length;i++) { for(int j=i;j<arr.length;j++) { if(arr[i]>arr[j]) { int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } } }
3、插入排序
package test.allSort; import java.util.Arrays; /** * @author Mrqian * @time 2018-12-25 * 插入排序 * */ public class InsertSort { public static void main(String[] args) { int [] arr= {1,5,8,2,7,257,853,7,357,537,687,36,73,47}; insertSort(arr); System.out.println(Arrays.toString(arr)); } public static void insertSort(int [] arr) { for(int i=1;i<arr.length;i++) { int temp=arr[i]; int j=i-1; while(arr[j]>temp&&j>=0) { arr[i]=arr[j]; j--; } arr[j+1]=temp; } } }
4、二分查詢法
package test.allSort;
/**
* @author Mrqian
* @time 2018-12-25
* 二分查詢法
* */
public class BinarySerach {
public static void main(String[] args) {
int [] arr= {1,5,8,2,7,257,853,7,357,537,687,36,73,47};
String result= binary(arr, 5);
System.out.println(result);
}
public static String binary(int [] arr,int a) {
choose(arr);
int first=0;
int last=arr.length-1;
int mid;
while(first<=last) {
mid=(first+last)/2;
if(arr[mid]==a) {
return "找到該元素"+a;
}else if(arr[mid]>a) {
last=mid-1;
}else {
first=mid+1;
}
}
return "沒找到該元素"+a;
}
public static void choose(int [] arr) {
for(int i=0;i<arr.length;i++) {
for(int j=i;j<arr.length;j++) {
if(arr[i]>arr[j]) {
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}
}
5、快速排序
package test.allSort;
import java.util.Arrays;
/**
* @author Mrqian
* @time 2018-12-25
* 快速排序
* */
public class QUickSort {
public static void main(String[] args) {
int [] arr= {1,5,8,2,7,257,853,7,357,537,687,36,73,47};
kspx(arr, 0, arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static int quickSort(int [] arr,int left, int right) {
int key=arr[left];
while(left<right) {
while(key<=arr[right]&&left<right) {
right--;
}
arr[left]=arr[right];
while(key>=arr[left]&&left<right) {
left++;
}
arr[right]=arr[left];
}
arr[left]=key;
return left;
}
public static void kspx(int [] arr,int left,int right) {
if(left<right) {
int index=quickSort(arr, left, right);
kspx(arr, left, index);
kspx(arr, index+1, right);
}
}
}
6、歸併排序
package test.allSort;
import java.util.Arrays;
/**
* @author Mrqian
* @time 2018-12-25
* 歸併排序
* */
public class MergeSort {
public static void main(String[] args) {
int [] arr= {1,5,8,2,7,257,853,7,357,537,687,36,73,47};
int [] newarr=new int[arr.length];
guibing(arr, 0, arr.length-1, newarr);
System.out.println(Arrays.toString(arr));
}
public static void guibing(int [] arr,int left, int right,int [] newarr) {
if(left<right) {
int mid=(left+right)/2;
guibing(arr, left, mid, newarr);
guibing(arr, mid+1, right, newarr);
merge(arr, left, mid, right, newarr);
}
}
public static void merge(int [] arr,int left, int mid,int right,int [] newarr) {
int m=left;int x=mid;
int n=mid+1;int y=right;
int index=0;
while(m<=x&&n<=y) {
if(arr[m]<arr[n]) {
newarr[index++]=arr[m++];
}else {
newarr[index++]=arr[n++];
}
}
while(m<=x) {
newarr[index++]=arr[m++];
}
while(n<=y) {
newarr[index++]=arr[n++];
}
for(int i=0;i<index;i++) {
arr[i+left]=newarr[i];
}
}
}