2020.2.7
13:30
插入排序:
思路:從第一個值開始,向前面的插入,後面的數字在向前面插入的時
候,前面的數字一定已經排好序了,找一個位置將這個數再放入到正確
的位置。
注:(上面的那張圖片和下面那個gif,是我保存的別人的,僅僅只是爲了好理解,並沒有其他的意思。)
代碼演示:
public static void main(String[] args) {
int []a= {3,8,2,56,21,23};
System.out.println("排序之前:");
for(int i=0 ;i<a.length;i++) {
System.out.print(a[i]+" ");
}
for(int i=0;i<a.length;i++) { //遍歷每一個數
for(int j=i; j>0; j-- ) { //將a[i]向前移動,移動到前面的數比它小或者前面沒有數的時候停下來
if(a[j]<a[j-1]) {
int temp=a[j]; //交換數
a[j]=a[j-1];
a[j-1]=temp;
}else {
break;
}
}
結果:
改寫爲遞歸的形式
思路:對數組的排序=對數組中0到倒數第二個元素排序+倒數第一個元
素插入到這個有序的部分中去。並且,,記住每一個遞歸的步驟:
①:找重複 ②:設參數 ③:找出口
代碼演示:
public static void sort(int []arr,int k) {
if(k==0) { //遞歸的出口
return; //第一個元素不用去排序
}
sort(arr,k-1); //對從0到倒數第二個元素排序
int x=arr[k];
int index=k-1; //設置指針
while(index>-1&& x<arr[index]) { //對最後一個元素進行插入
arr[index+1]=arr[index]; //交換
index--;
}
arr[index+1]=x; //指針的邊界
}
結果:
草稿:
兩種方法比較代碼演示:
package LanQiaoKnowledgePractise;
//插入排序
public class insertionSortingTest {
public static void sort(int []arr,int k) {
if(k==0) { //遞歸的出口
return; //第一個元素不用去排序
}
sort(arr,k-1); //對從0到倒數第二個元素排序
int x=arr[k];
int index=k-1; //設置指針
while(index>-1&& x<arr[index]) { //對最後一個元素進行插入
arr[index+1]=arr[index]; //交換
index--;
}
arr[index+1]=x; //指針的邊界
}
//從第一個數字開始向前插入,後面的數字在向前插入的時候,前面的數字一定已經排好序了,找一個位置將這個數放入正確的位置
public static void main(String[] args) {
int []a= {3,8,2,56,21,23};
System.out.println("排序之前:");
for(int i=0 ;i<a.length;i++) {
System.out.print(a[i]+" ");
}
for(int i=0;i<a.length;i++) { //遍歷每一個數
for(int j=i; j>0; j-- ) { //將a[i]向前移動,移動到前面的數比它小或者前面沒有數的時候停下來
if(a[j]<a[j-1]) {
int temp=a[j]; //交換數
a[j]=a[j-1];
a[j-1]=temp;
}else {
break;
}
}
}
System.out.println();
System.out.println("排序之後:");
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
System.out.println("*****************************");
int []arr= {52,32,21,45,12,32,5};
System.out.println("*******排序前***********************");
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
System.out.println("**************排序後****************************");
sort(arr,6);
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
}
}
收工午休