排序算法2-冒泡排序-插入排序-选择排序

一、冒泡排序(Bubble Sort)

 冒泡排序是一种简单的排序算法,时间复杂度为O(n2),最快是O(n);空间复杂度为O(1)。

算法流程:

原始数组:4 3 2 1

3 4 2 1

3 2 4 1

3 2 1 4

2 3 1 4

2 1 3 4

1 2 3 4

 代码(已优化):

 1 int n,a[100];
 2 void sort() {
 3     bool ok;
 4     int change;
 5     for(int i=n-1; i>=1; i--) {
 6         ok=true;
 7         for(int j=1; j<=1; j++) {
 8             if(a[j]>a[j+1]) {
 9                 change=a[j],a[j]=a[j+1],a[j+1]=change;
10                 ok=false;
11             }    
12         }
13         if(ok==true) break;
14     }
15 }

 

二、插入排序(Insertion Sort)

 插入排序的时间复杂度为O(n2),空间复杂度为O(1)。

流程:

原始数组:4 3 2 1

4 [3 2 1]→3 4 [2 1]→2 3 4 [1]→1 2 3 4

但是,数的插入也需要时间(O(原始下标-移动后位置))

代码:

 1 int a[100],n;
 2 void sort() {
 3     bool ok=false;
 4     int aa,j;
 5     for(int i=n; i>=1; i--) {
 6         i+=ok,ok=0;
 7         j=i;
 8         while(a[j]<a[j-1]) {
 9             aa=a[j];
10             a[j]=a[j-1],a[j-1]=aa;
11             j--;
12             ok=1;
13         }
14     }
15     return;
16 }

 

 

三、选择排序(Selection Sort)

 和选择排序差不多,时间复杂度为O(n2),空间复杂度为O(1)。

流程:

原始数组:4 3 2 1

[4 3 2 1]→[3 2 1] 4→[2 1] 3 4→[1] 2 3 4

但是,数的移动也需要时间(O(原始下标-移动后位置))

代码:

 1 int a[100],n;
 2 void sort() {
 3     int mix,temp;
 4     for(int i=1; i<n; i++) {
 5         mix=i;
 6         for(int j=i+1; j<n; j++)
 7             if(a[j]<a[mix]) mix=j;
 8         if(i!=mix) {
 9             temp=a[i];
10             a[i]=a[mix];
11             a[mix]=temp;
12         }
13     }
14 }

 

posted @ 2020-12-15 15:01  VegetableChick  阅读(57)  评论(0)    收藏  举报