学计算机的那个

不是我觉到、悟到,你给不了我,给了也拿不住;只有我觉到、悟到,才有可能做到,能做到的才是我的.

0%

冒泡排序

前几天的一个算法题面试,手写代码,发现n多年没写的冒泡排序,两层循环的意义忘记了,加深下记忆。核心是响铃两个数进行比较,循环的次数的意义需要重点关注下。

冒泡排序

冒泡排序算法的运作如下:

  1. 比较相邻的元素。如果第一个比第二个大,就交换它们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>

void sortBuble(int ary[],int length){
for(int i=0; i<length-1;++i) //n个数需要比较n-1次
for (int j=0; j<length-1-i; ++j) { //i表示已经排完的个数
if(ary[j]>ary[j+1]){
int temp = ary[j];
ary[j] = ary[j+1];
ary[j+1] = temp;
}
}
}

int main(int argc, const char * argv[]) {
int ary[] = {2,4,45,66,33,88,22,13,99};
int length = sizeof(ary)/sizeof(ary[0]);
printf("length : %d\n",length);
sortBuble(ary,length);
for(int i= 0;i<length;++i){
printf("%d ",ary[i]);
}
std::cout << "\n";
return 0;
}