(一)氣泡排序、選擇排序、插入排序
最近在看資料結構與演算法分析,想寫個筆記記錄一下,先從基本的冒泡、選擇、插入開始吧。
注:都是以增序為例說明
一、氣泡排序
1、原理:從陣列的第一個位置開始兩兩比較array[index]和array[index+1],如果array[index]大於array[index+1]則交換array[index]和array[index+1]的位置,止到陣列結束;
從陣列的第一個位置開始,重複上面的動作,止到陣列長度減一個位置結束;
從陣列的第一個位置開始,重複上面的動作,止到陣列長度減二個位置結束;
。。。。
2、 時間複雜度:O(N²),進行了(n-1)*(n-2)....=n*(n-1)/2次比較和約比較次數一半的交換次數(均況下),那麼根據大O表示法時間複雜度為O(N^2)
3、程式碼
/**
* 冒泡增序演算法
* @param array
*/
public static void bubblingSort(int[] array){
for(int i=0;i<array.length;i++){
for(int j=0;j<array.length-i-1;j++){
if(array[j]>array[j+1]){
swap(array,j,j+1);
}
}
}
}
private static void swap(int[] array,int x,int y){
int temp = array[x];
array[x] = array[y];
array[y] = temp;
}
二、選擇排序
1、原理:選擇一個值array[0]作為標杆,然後迴圈找到除這個值外最小的值(查詢小於標杆的最小值),交換這兩個值,這時最小值就被放到了array[0]上,然後再將array[1]作為標杆,從剩下未排序的值中找到最小值,並交換這兩個值。
如圖:(資料結構與演算法中的圖)
2、時間複雜度:O(N^2),與氣泡排序相比減少了陣列交換的次數
3、程式碼
/**
* 選擇排序增序
* @param array
*/
public static void selectSort(int [] array){
for(int i=0;i<array.length;i++){
int index = i;
for(int j=i+1;j<array.length;j++){
if(array[j] < array[index]){
index = j;
}
}
if(i != index) swap(i,index,array);
display(array);
System.out.println();
}
}
public static void swap(int a,int b,int array[]){
int temp = array[a];
array[a] = array[b];
array[b] = temp;
}
三、插入排序
1、原理:插入排序的思想是陣列是部門有序的,然後將無序的部分迴圈插入到已有序的序列中
如圖:(從資料結構與演算法中摘得)
2、時間複雜度:插入排序對隨即順序的序列的時間複雜度也為O(N^2),但是對於基本有序的序列進行排序時間複雜度為O(N)
3、程式碼
/**
* 插入排序升序
* @param array
*/
public static void insertSort(int [] array){
for(int out=1;out<array.length;out++){
int temp = array[out];//被標記的值或者說是當前需要插入的值
int in = out;
//如果輪循值大於被標記值則往後移
while( in > 0 && temp < array[in - 1]){
array[in] = array[in - 1];
in -- ;
}
//將被標記值插入最終移出的空位置
array[in] = temp;
}
}
下次寫:希爾排序、快速排序
轉載來自:http://m.blog.csdn.net/hijiankang/article/details/9207735
相關文章
- php實現 氣泡排序,插入排序,選擇排序PHP排序
- 排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)排序演算法
- JAVA小練習氣泡排序,選擇排序和插入排序Java排序
- PHP 常見4種排序 氣泡排序、選擇排序、插入排序、快速排序PHP排序
- 選擇排序和氣泡排序排序
- 氣泡排序與選擇排序排序
- 氣泡排序和選擇排序排序
- 【小小前端】前端排序演算法第一期(氣泡排序、選擇排序、插入排序)前端排序演算法
- 圖形化排序演算法比較:快速排序、插入排序、選擇排序、氣泡排序排序演算法
- 9. 氣泡排序,以及如何優化氣泡排序,氣泡排序屬於插入排序排序優化
- 氣泡排序 插入排序 快排排序
- 氣泡排序和選擇排序詳解排序
- 氣泡排序和選擇排序流程圖排序流程圖
- 排序演算法 - 氣泡排序和選擇排序排序演算法
- java氣泡排序-選擇排序-插入排序-使用API中文文件直接呼叫函式Java排序API函式
- #排序演算法#【1】概述、氣泡排序、選擇排序排序演算法
- go 實現氣泡排序和插入排序Go排序
- 重學資料結構和演算法(四)之氣泡排序、插入排序、選擇排序資料結構演算法排序
- 用JS實現氣泡排序和插入排序JS排序
- 氣泡排序與選擇排序超詳細講解排序
- 關於js陣列的六種演算法---水桶排序,氣泡排序,選擇排序,快速排序,插入排序,希爾排序的理解。JS陣列演算法排序
- 【JS面試向】選擇排序、桶排序、氣泡排序和快速排序簡介JS面試排序
- 筆試之排序-直接插入排序、氣泡排序、快速排序筆試排序
- 選擇排序和插入排序排序
- 桶排序 選擇,插入排序排序
- 排序——氣泡排序排序
- 八大排序演算法(1)_氣泡排序和選擇排序排序演算法
- Python八大演算法的實現,插入排序、希爾排序、氣泡排序、快速排序、直接選擇排序、堆排序、歸併排序、基數排序。Python演算法排序
- 經常提及的幾個js排序方法(氣泡排序、選擇排序、計數排序)JS排序
- Java實現氣泡排序和插入排序演算法Java排序演算法
- 演算法(三)初等排序後篇[選擇和氣泡排序]演算法排序
- 演算法--陣列氣泡排序和選擇排序原理分析演算法陣列排序
- 排序:氣泡排序&快速排序排序
- python實現氣泡排序、插入排序以及快速排序演算法Python排序演算法
- 排序之氣泡排序排序
- 圖解選擇排序與插入排序圖解排序
- 氣泡排序排序
- 排序:交換排序——氣泡排序法排序