遞歸形式改寫插入排序

						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]+"  ");
		}
		
		
		
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}

在這裏插入圖片描述

收工午休
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章