氣泡排序,選擇排序,插入排序 c 演算法優化版本

2022-05-01 21:21:09 字數 2544 閱讀 5751

氣泡排序

/*

* bubblesort.h

* 氣泡排序

* created on: 2023年2月10日

* author: luyonglei */

#ifndef src_bubblesort_h_

#define src_bubblesort_h_#include

using

namespace

std;

#if 0template

void bubblesort(vector&arr)

}//若已經有序,則提前退出排序

if(sorted)

break

; }

}#else

template

void bubblesort(vector&arr)

}//記錄最後一次交換位置,減少比較次數

end =sortedindex;

}}#endif

#endif /* src_bubblesort_h_ */

選擇排序

/*

* selectionsort.h

* 選擇排序(選擇排序交換次數遠遠小於氣泡排序,所以平均效能比氣泡排序要好)

* created on: 2023年2月10日

* author: luyonglei */

#ifndef src_selectionsort_h_

#define src_selectionsort_h_#include

using

namespace

std;

#if 1template

void selectionsort(vector&arr)

swap(arr[maxindex], arr[end]);

//選擇最大的元素,與末尾元素交換位置}}

#else

//利用堆來選擇最值,配合排序演算法可以降低演算法複雜度,所以衍生出了堆排序

#endif

#endif /* src_selectionsort_h_ */

插入排序

/*

* insertionsort.h

* 插入排序

* created on: 2023年2月11日

* author: luyonglei */

#ifndef src_insertionsort_h_

#define src_insertionsort_h_#include

#include

"binarysearch.h

"using

namespace

std;

#if 0template

void insertionsort(vector&arr)

}}#elif 0

//優化,將交換改為挪動

templatevoid insertionsort(vector&arr)

arr[end] =value;

}}#else

//對已排序部分進行二分搜尋優化(在挪動的基礎上再優化比較次數)

templatevoid insertionsort(vector&arr)

arr[index] =value;

}}#endif

#endif /* src_insertionsort_h_ */

插入排序優化中使用到的二分搜尋

/*

* binarysearch.h

* 二分查詢

* 陣列取值範圍盡量保證左閉右開,這樣end-begin=size,編碼比較方便

* created on: 2023年2月11日

* author: luyonglei */

#ifndef src_binarysearch_h_

#define src_binarysearch_h_#include

using

namespace

std;

#define element_not_find -1

//查詢value在有序陣列arr中的位置

templateint indexof(const vector&arr, int

size, t value)

else

if (value >arr[middle])

else

}return

element_not_find;}//

查詢value在有序陣列arr中待插入的位置

//有序陣列中第乙個大於value的位置

templateint indexofinsertion(const vector&arr, int

size, t value)

else

}//此時begin==end

return

begin;

}#endif /* src_binarysearch_h_ */

《演算法》選擇排序 插入排序 氣泡排序

選擇排序,演算法 p156 package algorithm public class selection p156 for int i 0 i n i public static void main string args test.sort a 思路 將第乙個元素與剩餘所有元素相比,如果有比第...

排序演算法 氣泡排序 選擇排序 插入排序

氣泡排序演算法 氣泡排序是最簡單的排序演算法之一。此演算法具有二次方程增長階,因此僅適合排序小列表。氣泡排序演算法是階o n 2 的演算法 package com.szy.structure.sort public class bubblesort system.out.println 排序前 fo...

排序演算法 氣泡排序 插入排序 選擇排序

2 穩定性 2.氣泡排序 3.插入排序 4.選擇排序 5.總結 對於演算法,我們首先考慮的就是其時間複雜度和空間複雜度。1 時間複雜度 另外,由於序列順序不一定,不同情況下的時間複雜度也不同,所以我們還要考慮最好情況和最壞情況。2 空間複雜度 這裡引入了乙個新的概念,我們把o 1 的空間複雜度的排序...