一、思想
像冒泡一樣,從前到到後遍歷數組,前後做對比,前面比後面大的則交換(升序)
二、冒泡排序(未優化的)代碼實現,升序:遍歷找出最大值,時間複雜度O(n平方)
void swap(int* num1,int*num2){
int temp;
temp = *num1;
*num1 = *num2;
*num2 = temp;
}
void bullurSort(int* list,int len){
for (int i = 0; i < len-1; ++i) {
//注意k還是從0開始,
for (int k = 0; k < len-1; ++k) {
if (list[k]>list[k+1]){
swap(&list[k],&list[k+1]);
}
}
}
}
三、優化的冒泡排序,時間複雜度O(n平方)
優化一、k < len-1-i,前面已經排好序的就不用再比較了
優化二、如果一次排序過程都不用交換了,說明後面的都排序好了,就提前退出遍歷,引入flag標誌來判斷
void swap(int* num1,int*num2){ int temp; temp = *num1; *num1 = *num2; *num2 = temp; }
void optimizeBullurSort(int* list,int len){
bool flag = false;
for (int i = 0; i < len-1; ++i) {
flag = false;
for (int k = 0; k < len-1-i; ++k) {
if (list[k]>list[k+1]){
swap(&list[k],&list[k+1]);
flag = true;
}
}
if(!flag){
break;
}
}
}