排序演算法總結(持續更新)

2021-10-09 23:30:43 字數 1642 閱讀 9887

基本思想

通過對待 排序序列從前向後(從下標較小的元素開始),依次比較 相鄰元素的值,若發現逆序則交換,使值較大 的元素逐漸從前移向後部,就象水底下的氣泡一樣逐漸 向上冒。規則

**實現(未優化)

public

static

void

bubblesort

(int

arr)}}

}

時間複雜度:

空間複雜度:

優化氣泡排序

在排序的過程中,各元素不斷有序,如果一趟下來沒有進行過交換,就說明序列有序,因此可以在排序過程中設定乙個結束標誌stop判斷元素是否進行過交換,從而減少不必要的比較。

public static void bubblesort1(int arr)

}//沒有交換,就結束排序

if (!stop)

}}

時間複雜度:

空間複雜度:

基本思想

第一次從arr[0]arr[n-1]中選取最小值,與arr[0]進行交換;第二次從arr[1]arr[n-1]中選取最小值,與arr[1]進行交換;第三次從arr[2]arr[n-1]中選取最小值,與arr[2]進行交換;第i次從arr[i-1]arr[n-1]中選取最小值,與arr[i-1]進行交換,···,第n-1次從a[n-2]~a[n-1]中選取最小值,與a[n-2]進行交換,總共進行n-1次,得到乙個從小到大排序的序列。

排序過程

原始陣列:4,2,8,5

第一趟排序:2,4,8,5

第二趟排序:2,4,8,5

第三趟排序:2,4,5,8

規則

**實現

public

static

void

selectsort

(int

arr)

}//交換

if(minindex!=i)

} system.out.

println

(arrays.

tostring

(arr));

}

時間複雜度:

空間複雜度:

基本思想

把n個待排序的元素看成為乙個有序表和乙個無序表,開始時有序表中只有乙個元素,無序表中有n-1個元素,排序過程中每次從無序表中取出第乙個元素,把它和有序表中的元素依次做比較,將它插入到有序表中的適當位置,使之稱為有序表中的新元素。

排序過程

演算法實現

public

static

void

insertsort

(int

arr)

//如果尋找到合適的位置以後,執行插入操作,此時,insertvalue>arr[insertindex]或者insertindex=-1

arr[insertindex +1]

= insertvalue;

system.out.

println

("第"

+i+"趟排序的結果:"

+ arrays.

tostring

(arr));

}}

排序演算法總結 持續更新

1.選擇排序法 1.選擇排序 o n2 穩定 template void selectionsort t arr,int n swap arr i arr minindex 2.插入排序法 2 插入排序 o n2 穩定,近乎有序的陣列時,效率很高 1.交換法 使用swap,效率較低 template...

排序演算法大總結(持續更新。。。)

主要思路 選擇乙個基準數字 一般是第乙個數字 設定兩個指標分別為 i和j,j從序列後面往前跳動,i從序列前面往後跳動,j遇到乙個比基準數字小的數字那麼停止,i遇到乙個比基準數字大的數字停止,如果i和j不相等,那麼將這兩個數字交換,直到i和j相等,終止迴圈,將第i個數字和選擇的基準數字交換位置,那麼操...

常用排序演算法總結。 力求持續更新

歸併排序是將兩個或者兩個以上的有序序列進行合併的一種排序演算法。採用了分治的思想。一般使用遞迴。最好 最壞 平均時間複雜度都是o nlgn 由於在歸併過程中需要與原始記錄序列同樣數量的儲存空間存放歸併結果以及遞迴深度為lg2n的棧空間,因此 空間 複雜度為o n logn include inclu...