氣泡排序是所有排序演算法中最基本、最簡單的一種。思想就是交換排序,通過比較和交換相鄰的資料來達到排序的目的。
設陣列的長度為n:
1、比較前後相鄰的二個資料,如果前面資料大於後面的資料,就將這二個資料交換。
2、這樣對陣列的第0個資料到n-1個資料進行一次遍歷後,最大的乙個資料就「沉」到陣列第n-1個位置。
3、n=n-1,如果n不為0就重複前面二步,否則排序完成。
按照這個定義很快就能寫出**:
public static void sort(int arr)}}
}選擇排序演算法在每一步中選取最小值來重新排序,通過選擇和交換來實現排序。
具體流程如下:
1、首先從原陣列中選擇最小的1個資料,將其置於第乙個位置。
2、然後從剩下的資料中再選擇其中最小的乙個資料,並將其置於原陣列的第二個位置。
3、不斷重複選擇和交換的過程,直至最後排序完成。
public static void sort(int arr)
}//交換
if(small != i)}}
直接插入排序是將未排序的資料插入至已排好序序列的合適位置。
具體流程如下:
1、首先比較陣列的前兩個資料,並排序;
2、比較第三個元素與前兩個排好序的資料,並將第三個元素放入適當的位置;
3、比較第四個元素與前三個排好序的資料,並將第四個元素放入適當的位置;
......
4、直至把最後乙個元素放入適當的位置。
public static void sort(int arr)else
}arr[j+1] = temp;}}
快速排序,顧名思義,是一種速度快,效率高的排序演算法。
快排原理:
在要排的數(比如陣列a)中選擇乙個中心值key(比如a[0]),通過一趟排序將陣列a分成兩部分,其中以key為中心,key右邊都比key大,key左邊的都key小,然後對這兩部分分別重複這個過程,直到整個有序。
整個快排的過程就簡化為了一趟排序的過程,然後遞迴呼叫就行了。
一趟排序的方法:
1、定義i=0,j=a.lenght-1,i為第乙個數的下標,j為最後乙個數下標
2、從陣列的最後乙個數aj從右往左找,找到第一小於key的數,記為aj;
3、從陣列的第乙個數ai 從左往右找,找到第乙個大於key的數,記為ai;
4、交換ai 和aj
5、重複這個過程,直到 i=j
6、調整key的位置,把a[i] 和key交換
public static void sort(int arr,int low,int high)
//2. 存
int i = low;
int j = high;
//3. key
int key = arr[i];
//4. 完成一次比較
while(i < j)
// 4.2 從左邊找到乙個大於key的數
while(i 交換
if(i} 跳轉key 的位置
int p = arr[i];
arr[i] = arr[low];
arr[low] = p;
//5. 對 key 左邊的資料快速排序
sort(arr,low,i-1);
//6. 對 key 右邊的資料快速排序
sort(arr,i+1,high);
}
java常用排序演算法 冒泡,選擇,插入
重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。時間複雜度 o n 為穩定演算法。public static void bubblesort int arr 每一次從待排序的資料元素中選出最小 ...
冒泡,快排,插入,希爾,選擇,歸併演算法
演算法,根據資料的樣子,進行做計算。爭取在固有資料的基礎上,達到計算次數 記憶體占用最少的運算方式。現將集中演算法歸納如下 演算法名稱 演算法概要 冒泡挨個拿陣列的元素和後面的做比較,發現大小不對,則交換位置,這樣導致按照座標向後運算,座標資料是一定有序的,相對後面最大或最小 快排拿乙個陣列,向前查...
排序演算法 插入 選擇 冒泡 快排 歸併
可以找一些帖子理解下幾類排序演算法或者聽下陳越姥姥在mooc上的資料結構 選擇類排序 交換類排序 歸併排序 基數排序 拓撲排序 從待排序的n個記錄中的第二個記錄開始,依次與前面的記錄比較並尋找插入的位置,每次外迴圈結束後,將當前的數插入到合適的位置。void sort insert int a,in...