排序算法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 }

浙公网安备 33010602011771号