【冒泡排序设计】
思路
冒泡排序这个算法,对于我这样的初学者来说,也不是很简单!!!(没有想象的那么简单)!
它的核心思想是:两两相邻的元素进行比较,如果符合要求,则不交换,不符合要求,则两个元素交换!它是在一块连续的内存中进行比较,它的效率相对较高
对于一排数字:5,4,3,1,2,8,7这7个数字两两相邻进行比较,先进行一趟冒泡比较!没进行一趟冒泡比较一定能确定一个元素的位置,那么,有n个元素,则进行n-1趟排序就可以确定没有元素的位置,而n个元素,交换n-1对,能确定1个元素的位置。
5 4 3 1 2 8
4 5 3 1 2 8
4 3 5 1 2 8
4 3 1 5 2 8
4 3 1 2 5 8
4 3 1 2 5 8
代码
c
void bubble_sort(int arr[], int sz)
{
//共有sz个元素,每一趟确定一个元素,则需确定sz-1趟
for (int i = 0; i < sz - 1; i++) {
//有几对的比较
//如果发现在一趟中没有元素交换,则已经排序完毕
int flag = 1;
for (int j = 0; j < sz - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
//交换
flag = 0;
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
if (flag)
break;
}
}
int main()
{
int arr[] = {5,4,3,1,2,8,7};
int sz = sizeof(arr) / sizeof(int);
//这儿再说一下,sz不能在函数内部算,在函数内部arr是一个指针变量
bubble_sort(arr, sz);
for (int i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
结果
完结!!!