一、思想
像冒泡一样,从前到到后遍历数组,前后做对比,前面比后面大的则交换(升序)
二、冒泡排序(未优化的)代码实现,升序:遍历找出最大值,时间复杂度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;
}
}
}