冒泡排序,就是不断的通过比较相邻元素的大小,将最大的元素挪到数组的尾部,从而得到排序的目的。具体而言,假设有N个待排序的数字,用a[N]存贮这些数字。首先比较a[0]和a[1],如果a[0]>a[1],则将a[0]和a[1]交换位置。这样大的元素就挪到了a[1]的位置。接着,比较a[1]和a[2],按相同方式进行处理…直到a[n-2]和a[n-1]。这样一轮比较下来,就可以将最大的元素被挪到了a的末尾。紧接着我们继续做第二轮比较,这是只需要对n-1个数字进行操作就可以了,因为最后一个数字已经是最大的了,经过第二轮比较,就可以将第二大的数字放到了数组倒数第二个位置上。以此类推,最终完成N轮比较。冒泡排序的复杂度是O(N平方)。
具体实现如下:
#include<iostream>
#include<time.h>
using namespace std;
void bubbleSort(int n, int array[]) {
int i = 0, j = 0,temp=0;
for (i = n;i > 1;i--) {
for (j = 0;j < i-1;j++) {
if (array[j] > array[j + 1]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
void getNewArray(int array[], int n) {
for (int i = 0;i < n;i++) {
array[i] = rand() % 100;
}
}
int main() {
const int NUM = 10000;
srand((unsigned)time(NULL));
int *array=new int[NUM];
cout << "start..." << endl;
clock_t now = clock();
getNewArray(array, NUM);
now = clock();
bubbleSort(NUM, array);
cout << "bubble sort is :" << clock() - now << endl;
test(array, NUM);
delete array;
return 0;
}
这里需要提到的一点是,在bubbleSort函数中,交换array[j]和array[j+1]的时候,切忌使用内置的swap方法
swap(array[j], array[j + 1])
那效率叫一个酸爽