資料結構和演算法:03.冒泡、選擇排序
具體程式碼請看:NDKPractice專案的datastructure
知識點:
1. 巨集定義Log
列印
#define TAG "TAG"
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,TAG,__VA_ARGS__)
// 其他方法的定義 __android_log_print 取了一個別名(引數固定,可變)
2. rand() 隨機
// 輸出 0 到 49 之間的隨機數
rand() % 50
3. 氣泡排序
思想
:相鄰兩個數進行比較,如果前面的比後面的大,就進行交換,否則不需要交換
複雜度
:時間複雜度和空間複雜度都是 O(n的平方) ,可以優化的
void bubbleSort(int arr[],int len){
for (int i = 0; i < len - 1; ++i) { // 外迴圈代表迴圈次數 n - 1 步
for (int j = 0; j < len - i - 1; ++j) { // 內迴圈代表一次迴圈對比的次數 n-1,n-2,n-3,1
if(arr[j] > arr[j+1]){
// 交換 一次交換是三次賦值
swap(arr[j],arr[j+1]);
}
}
}
}
4. 選擇排序
思想
: 遍歷找出最小的位置,最後與第一個位置交換
複雜度
:空間複雜度是:O(1),耗費的時間比上邊未優化的氣泡排序要少很多
void selectSort(int arr[],int len){
for (int i = 0; i < len - 1; ++i) { // 外迴圈代表迴圈次數 n - 1 步
int min = i;
for (int j = i+1; j < len; ++j) { // 內迴圈代表一次迴圈對比的次數
if(arr[min] > arr[j]){
min = j;
}
}
swap(arr[min],arr[i]);
}
}
相關文章
- 從零開始學資料結構和演算法(一)冒泡與選擇排序資料結構演算法排序
- 資料結構與演算法——排序演算法-選擇排序資料結構演算法排序
- 資料結構32:選擇排序資料結構排序
- 演算法與資料結構——選擇排序(c++)演算法資料結構排序C++
- 重學資料結構和演算法(四)之氣泡排序、插入排序、選擇排序資料結構演算法排序
- 排序法:選擇、冒泡、插入和快排排序
- 單連結串列的排序(插入,選擇,冒泡)排序
- 演算法與資料結構系列 ( 三 ) - 選擇排序法- Select Sort演算法資料結構排序
- 陣列基本操作及冒泡演算法、直接選擇排序陣列演算法排序
- 冒泡、選擇、快排、插入排序—效能簡單測試/rand()邊界值——c++資料結構排序C++資料結構
- 常見的三種排序演算法(選擇,冒泡,計數)排序演算法
- 看圖輕鬆理解資料結構與演算法系列(選擇排序)資料結構演算法排序
- 資料結構學習筆記-簡單選擇排序資料結構筆記排序
- C語言排序 冒泡 選擇 快排C語言排序
- 排序演算法 - 氣泡排序和選擇排序排序演算法
- 最簡單易懂的三種排序演算法:冒泡、選擇、插入排序演算法
- (建議收藏)2020最新排序演算法總結:冒泡、選擇、插入、希爾、快速、歸併、堆排序、基數排序排序演算法
- 【圖解資料結構】 一組動畫演示選擇排序圖解資料結構動畫排序
- js資料結構和演算法(9)-排序演算法JS資料結構演算法排序
- (三)陣列的定義、折半查詢、排序(選擇和冒泡)陣列排序
- 七、排序,選擇、冒泡、希爾、歸併、快速排序實現排序
- 排序演算法:選擇排序排序演算法
- 排序演算法__選擇排序排序演算法
- 資料結構和演算法(Golang實現)(25)排序演算法-快速排序資料結構演算法Golang排序
- 資料結構與演算法——排序資料結構演算法排序
- 基礎排序(冒泡、選擇、插入)學習筆記排序筆記
- 資料結構和演算法面試題系列—排序演算法之快速排序資料結構演算法面試題排序
- 演算法學習之選擇排序和堆排序:演算法排序
- 資料結構與演算法——排序演算法-歸併排序資料結構演算法排序
- 資料結構與演算法——排序演算法-基數排序資料結構演算法排序
- 資料結構與演算法——排序演算法-氣泡排序資料結構演算法排序
- [資料結構與演算法] 排序演算法資料結構演算法排序
- 資料結構與演算法(八):排序資料結構演算法排序
- 資料結構與演算法之排序資料結構演算法排序
- 資料結構與演算法:堆排序資料結構演算法排序
- 【資料結構與演算法】堆排序資料結構演算法排序
- 資料結構與演算法——堆排序資料結構演算法排序
- 資料結構與演算法----# 一、排序資料結構演算法排序