简单的排序算法:冒泡排序法

算法原理:通过不断对比相邻两个元素之间的大小关系,将大的元素向后移动

时间复杂度:O(n^2)

c++实现对整形数组排序

1 void bubbleSort(int arr[],int n)
2 {
3     for(int i=1;i<n;i++)
4         for(int j=1;j<n-i;j++)
5             if(arr[j-1]>arr[j])
6                 swap(arr[j-1],arr[j]);
7     return;
8 }

或者,因为每次循环可以得到当前循环最大的元素并放在数组最后,所以可以通过将最后一次交换的位置赋值给数组长度,获得下次循环的限定条件

 1     void bubbleSort(int arr[],int n)
 2     {
 3         bool swapped;
 4         int newn;
 5         
 6         do{
 7             swapped=false;
 8             newn=0;
 9             for(int i=1;i<n;i++)
10             {
11                 if(arr[i-1]>arr[i])
12                 {
13                     swap(arr[i-1],arr[i]);
14                     swapped=true;
15                     newn=i;
16                 }
17             }
18             n=newn;
19         }while(swapped);
20         return;
21     }

经过简化,将newn赋值简化为n--

 1     void bubbleSort(int arr[],int n)
 2     {
 3         bool swapped;
 4         
 5         do{
 6             swapped=false;
 7             for(int i=1;i<n;i++)
 8             {
 9                 if(arr[i-1]>arr[i])
10                 {
11                     swap(arr[i-1],arr[i]);
12                     swapped=true;
13                 }
14             }
15             n--;
16         }while(swapped);
17         return;
18     }

三种排序在对随机数排序时,第二种排序时间最长,第三种比第一种时间稍长。

在对接近有序的数组排序时,越接近有序,第一种变化比较小,第二种和第三种排序速度越快,第二种比第三种变化大,在只有个别元素无序时,第二种最快

 

posted on 2017-02-10 17:56  京城妖  阅读(290)  评论(0编辑  收藏  举报

导航