自己呼叫自己呼叫方法時傳入不同的引數,使**更加簡潔
遞迴的呼叫機制
:遞迴可以解決的問題
分類:內部排序:使用記憶體進行排序
外部排序:使用外部儲存排序
內部排序分類:
插入排序
交換排序
選擇排序
歸併排序
基數排序
演算法規則:
遍歷陣列如果遇到逆序則進行資料交換
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.當問題規模較大時,可以分解為若干個相互獨立的子問題,這些子問題與原問題具有相同的特徵。若不能直接解決,則可分...