冒泡排序
冒泡排序的基本思想:从数列的第一个数开始,把第1个数和第二个数比较,如果第一个比第二个大,就交换两个数的位置(从小到大排序时),然后比较第二个数字和第三个数字的大小,直到比较到最后一位,我们的第一趟排序结束,此时最大值就会出现在最后面。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名“冒泡排序”(和选择排序差不多,选择排序是选择出最大或者最小的数和前面的数字移形换位,冒泡排序是一步一步走到最后面)。
冒泡算法是稳定的算法:因为我们是通过一一比较来交换的,如果两个数字的大小相同,我们就不会交换他们的位置。
冒泡步骤详解:
第一趟:
第二趟:
第三趟:
第四趟:
第五趟:
冒泡排序的时间复杂的:
和记录移动次数
均达到最小值:
,
。
。
若初始文件是反序的,需要进行
趟排序。每趟排序要进行
次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:
。
。
冒泡排序代码:
1 #include<iostream> 2 using namespace std; 3 int main(){ 4 int n,a[100001]; 5 //读入数据 6 cin >> n; 7 for(int i=0;i<n;i++){ 8 cin>>a[i]; 9 } 10 //处理数据 11 for(int i=0;i<n-1;i++){ 12 for(int j=0;j<n-1-i;j++){ 13 if(a[j]>a[j+1]){ 14 swap(a[j],a[j+1]); 15 } 16 } 17 } 18 //输出数据 19 for(int i=0;i<n;i++){ 20 cout<<a[i]<<" "; 21 } 22 return 0; 23 }