目录
1.什么是冒泡排序?
冒泡排序是一种经典的排序方法,在一组数据中,访问两个相邻的元素,如果元素不符合顺序就把它们交换位置,符合的话就不用交换位置,依此类推,直到所有元素都排好序列,就结束了,每个元素就像泡泡一样,根据大小的不同而冒到数组的不同一侧。
2.冒泡排序的原理
就比如说一组数据
要把它升序排出。
一次交换两个元素的位置,一趟就把一个元素的序列排好。
这是第二趟
第三趟
我们来比较一下这三趟。
第一趟需要交换9次,第二趟需要交换8次,第三趟需要交换7次,那么一共需要9趟。
用一个函数来实现冒泡排序。
#include<stdio.h>
void Bubble_Sort(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz - 1; i++) //sz-1决定趟数。
{
int j = 0;
for (j = 0; j < sz - 1 - i; j++) //sz-1-i决定冒泡的次数
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
Bubble_Sort(arr, sz);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
写到这里,冒泡排序的一个算法就完成了。接下来再来提供一个优化版的。
#include<stdio.h>
void Bubble_Sort(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz - 1; i++) //sz-1:最后一趟剩余一个元素,该堂冒泡可以省略。
{
int isChange = 0;
int j = 0;
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
isChange = 1; //如果本次冒泡进行数据交换了,说明本次数据是无序的;isChange为1。
}
if (!isChange) //如果本次冒泡中,元素没有进行交换,
return; //说明数据已经有序了,后面的冒泡就不用再进行了。
}
}
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
Bubble_Sort(arr, sz);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
这种优化也算是提高了效率。
今天的分享就到这里了,有什么建议尽管提出来。