遞迴與排序演算法

2022-01-09 20:53:46 字數 2127 閱讀 8504

自己呼叫自己呼叫方法時傳入不同的引數,使**更加簡潔

遞迴的呼叫機制

:遞迴可以解決的問題

分類:內部排序:使用記憶體進行排序

外部排序:使用外部儲存排序

內部排序分類:

插入排序

交換排序

選擇排序

歸併排序

基數排序

演算法規則:

遍歷陣列如果遇到逆序則進行資料交換

public class bubblesort

;bubblesort(arr);

system.out.println(arrays.tostring(arr));

}//arr【】 待排序陣列

public static void bubblesort(int arr)

}if(!flag) else }}

}

冒泡演算法優化:

定義乙個標記變數flag,判斷flag的值是否發生改變,若沒改變則陣列已經有序則可以提前跳出迴圈

演算法規則:遍歷陣列,將每次遍歷得到的最小值,與起始位置資料做交換

arr[0]-arr[n-1],找出最小值與arr[0]交換

arr[1]-arr[n-1],找出最小值與arr[1]交換,以此類推

public class selectsort

;selectsort(arr);

system.out.println(arrays.tostring(arr));

}//arr待排序陣列

public static void selectsort(int arr)

}//資料交換

if(minindex!=i) }}

}

選擇排序優化:

判斷最小值位置是否發生改變,若沒有則不需要進行資料交換

演算法規則:

假定兩個陣列,乙個是原陣列(大小為n-1),乙個是有序陣列(大小為1,存放原陣列的第乙個元素)。將原陣列中的資料依次取出放入有序陣列中的適當位置,將原陣列資料取出完畢後,則排序完畢

public class insertsort

;insertsort(arr);

system.out.println(arrays.tostring(arr));

}//arr待排序陣列

public static void insertsort(int arr)

//找到插入位置

if(insertindex!=i) }}

}

演算法優化:

判斷插入位置是否發生改變決定是否進行資料插入

演算法規則:

將陣列按照一定增量分組,對每組進行插入排序,繼續減少增量,插入排序,當增量減少為1時,則進行最後的插入排序,結果即為有序的

public class shellsort

;shellsort(arr);

system.out.println(arrays.tostring(arr));

}//arr待排序陣列

public static void shellsort(int arr)

//找到插入位置

arr[i]=value;}}

}}

演算法規則:

將陣列按照大於小於中間值分類,向左向右遞迴得到有序陣列

public class quicksort

;quicksort(arr, 0, arr.length-1);

system.out.println(arrays.tostring(arr));

}//arr待排序陣列,left陣列左邊索引,right陣列右邊索引

public static void quicksort(int arr,int left,int right)

//找右邊大於等於中間值的資料

while(arr[r]>pivot)

//判斷是否迴圈結束

if(l>=r)

//左右資料交換

temp=arr[l];

arr[l]=arr[r];

arr[r]=temp;

//防止存在相同值時死迴圈

if(arr[l]==pivot)

if(

遞迴與排序演算法

程式 資料結構 演算法 遞迴是一種應用非常廣泛的演算法。很多資料結構和演算法的編碼實現都要用到遞迴。排序演算法最經典最常用的冒泡插入選擇,時間複雜度都為o 乙個問題的解可以分解為幾個子問題的解 這個問題與分解之後的子問題,除了資料規模不同,求解思路完全一樣 存在遞迴終止條件 分成遞和歸來看,我覺得和...

遞迴排序演算法

1 歸併排序 歸併排序用的是分治法,即將要排序的陣列分而治之。如圖所示 簡單的 如下 public class merge publicvoid mergearray inta,int first,intmid,int last while i m while j n for i 0 i k i 將...

遞迴排序演算法

遞迴呼叫是用相同的方法去解決更小的問題,直到問題規模小於或等於某個邊界條件時,不再進行遞迴 遞迴的出口 而是直接處理,然後不斷向下執行函式返回結果。1.當問題小到一定規模時,可以直接求解 2.當問題規模較大時,可以分解為若干個相互獨立的子問題,這些子問題與原問題具有相同的特徵。若不能直接解決,則可分...