冒泡排序的实现
本人大二刚学完数据结构,后悔之前没认真学习各种排序,现在开始记录自己自学的情况。
冒泡排序顾名思义,可以理解为将相对较大或较小的值向后或向前依次移动。
下面记录一下冒泡的过程————:
首先,我们给出一个数组来存储一串无序的数值:
int arr[MaxSize]={8,7,6,5,1,2};
第一次循环
趟数 | 当前 |
---|---|
第一趟 8>7 | 7 8 6 5 1 2 |
第二趟 8>6 | 7 6 8 5 1 2 |
第三趟 8>5 | 7 6 5 8 1 2 |
第四趟 8>1 | 7 6 5 1 8 2 |
第五趟 8>2 | 7 6 5 1 2 8 |
好了,通过第一次循环我们可以观察到最大的数值被我们移动到了最右边,一共比较了5趟
第二次循环
趟数 | 当前 |
---|---|
第一趟 7>6 | 6 7 5 1 2 8 |
第二趟 7>5 | 6 5 7 1 2 8 |
第三趟 7>1 | 6 5 1 7 2 8 |
第四趟 7>2 | 6 5 1 2 7 8 |
第三次循环
趟数 | 当前 |
---|---|
第一趟 6>5 | 5 6 1 2 7 8 |
第二趟 6>1 | 5 1 6 2 7 8 |
第三趟 6>2 | 5 1 2 6 7 8 |
第四次循环
趟数 | 当前 |
---|---|
第一趟 5>1 | 1 5 2 6 7 8 |
第二趟 5 > 2 | 1 2 5 6 7 8 |
通过第二次比较已经比较明显了,第一趟把最大的数字8放到了最末尾,第二趟把7放到了8的前面。
由于7、8已经是有序的了,那么通过第三趟我们就能总结出规律:
1、总共两层循环,第一层循环是由数组的个数来定的,一共需要循环 MaxSize次。
2、内层循环是更具外层循环来定的,每次内层循环需要循环MaxSize-i次。
好了,规律已经总结完了,直接上代码吧。
#include<iostream>
#define MaxSize 6
using namespace std;
int main()
{
int arr[MaxSize]={8,7,6,5,1,2};
for(int i=0 ;i<MaxSize - 1 ; i++)
for(int j =0 ;j<MaxSize - i - 1;j++)
{
if(arr[j]>arr[j+1])
swap(arr[j],arr[j+1]);
}
//for(int i = 0; i<arr.length;i++)
for(int i =0 ;i<MaxSize;i++)
cout<<arr[i]<<endl;
return 0;
}
最后,对算法的性能进行分析:
排序类别 | 排序方法 | 平均时间复杂度 | 稳定性 |
---|---|---|---|
交换排序 | 冒泡排序 | O(N^2) | 稳定 |