做軟體開發,需要了解或是掌握一些常用的演算法,排序,也是一種演算法。
之前嵌入式軟體接觸的演算法不多,但隨著科技的進步,常用的通訊與控制,相對變的簡單化了。除了掌握底層驅動,上層的資料結構與演算法,物件導向的程式設計思路,都是需要不斷的掌握起來的,也就是說,要具有與時俱進的心態,有終身學習的打算。
最近手寫了冒泡法排序的演算法,雖然思路是有的,發現了很多的低階的問題。
(1)計算機程式設計,習慣了使用ide,使用變數或是函式名自動補全,**的編寫除了通過搜尋獲取**,改下格式與程式結構,很少從頭到尾的寫。
(2)一般**,很少一次性寫對,變數名稱,函式名稱,資料型別,程式邏輯,測試**,可能是不斷的除錯與修改。
手寫的**,沒有上機驗證,無法直接獲取輸出結果。需要通過理解,大體上判斷邏輯上是否清晰,邏輯是否有誤。所以,基本功還是要打一打。我對自己手寫的**,寫完發現邏輯不正確,修改後,勉強能工作,並且還沒有考慮異常情況。
當然,這些不足,都是自己平時不太注重細節造成的,雖說世界在劇烈的變化,心態還是要穩,一步步把框架搭好,把細節處理好,這就是人生的高樓的建設過程。
氣泡排序的主要演算法,需要考慮:
(1)排序的是什麼數值,有符號還是無符號,一般用int型陣列(有符號)足夠了。
(2)使用vs2019,發現直接在陣列裡初始化乙個負數,會被自動轉換成乙個正數,因此,負數使用括號括起來,-3使用(-3)。
(3)排序,有兩種方式,從小到大的排序,從大到小的排序。
(4)兩個迴圈,最外層的需要整個陣列遍歷,內層的,不用全部遍歷,因為每次迴圈,已經把最小的或是最大的,推到了尾部。
(5)實際了,這種排序,不需要額外的輸出陣列,直接在原陣列上也可以工作,只是,破壞了原來的輸入陣列。
(6)如果是int型的陣列,不要直接memcpy(位元組複製)。
可能還有其他的注意事項
一種實現如下:
// bubble_sort_t0.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。
//#include #define max_buf_num 20 //最大陣列的個數
void bubble_sort_high(int32_t * input_buf, uint32_t input_len, int32_t * output_buf)
for (i = 0; i < input_len; i++) //外迴圈,整個陣列遍歷
} }}
void bubble_sort_low(int32_t* input_buf, uint32_t input_len, int32_t* output_buf)
for (i = 0; i < input_len; i++) //外迴圈,整個陣列遍歷
} }}
void print_buf(int32_t * buf, uint32_t buf_len) //列印buffer
printf("\n---------------\n");
}int main()
; int32_t output_buf[max_buf_num] = ;
printf("\n------sort high to low ---------\n");
bubble_sort_high(input_buf, max_buf_num, output_buf); //高到低排序
print_buf(output_buf, max_buf_num);
printf("\n------sort low to high ---------\n");
bubble_sort_low(input_buf, max_buf_num, output_buf); //低到高排序
print_buf(output_buf, max_buf_num);
}
執行效果如下:
紙上得來終覺淺。
任何事情,都是如此,則簡單的事情認真做,可以成為專家。
基於python的氣泡排序法
這段氣泡排序的演算法具有選擇性的反向排序功能,當reverse true時,輸出為反向排序的list。雖然演算法比較簡單,但需要注意的是這段 的時間複雜度為 o n 2n 2 n2 def bubble sort nums list reverse false for i in range len ...
演算法 氣泡排序法
氣泡排序就是把小的元素往前調或者把大的元素往後調 c語言 include define size 8 void bubble sort int a,int n void bubble sort int a,int n int main int i bubble sort number,size fo...
冒泡法排序演算法
演算法筆記 再回顧冒泡法排序 冒泡法是我們學習程式設計接觸到的第乙個排序演算法,簡單而形象,整個比對過程跟泉水冒泡十分形似。冒泡法排序首先拿第乙個元素與相鄰元素進行比較,如果它比較大,就相互交換,這樣第一輪遍歷下來,最大的值就確定了,第n輪也是如此,都是從第乙個開始,一直比較到倒數第n個,這樣最大的...