voidBubbleSort(int A[] , int n){ int temp ; for(int i = 1 ; i < n ; i ++ ){ for(int j = 0 ; j < n - i ; j ++ ){ if( A[j] > A[j+1] ){ //大的数字后移 temp = A[j] ; A[j] = A[j+1] ; A[j+1] = temp ; } } } }
时间复杂度:O(n^2)
空间复杂度:O(1)
稳定排序
二、选择排序
将要排序的数组分成两部分,一部分有序的,一部分是无序的,从无序的部分取出最值放到已经排序的最后。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
voidSelectSort(int A[] , int n ){ int temp = 0 ; for(int i = 0 ; i < n - 1 ; i ++ ){ int min = i ; //找出后续数组中最小的值 for(int j = i + 1 ; j < n ; j ++ ){ if( A[min] > A[j]) min = j ; } //交换位置 if( min != i ){ temp = A[min] ; A[min] = A[i] ; A[i] = temp ; } } }
时间复杂度:O(n^2)
空间复杂度:O(1)
不稳定排序
三、插入排序
将要排序的数组分成两部分,每次从后面的部分取出索引最小的元素插入到前一部分的适当位置。
存在大量的移动操作。
1 2 3 4 5 6 7 8 9 10 11 12
voidInsertSort(int A[] , int n ){ int temp = 0 ; for(int i = 1 ; i < n ; i ++ ){ temp = A[i] ; int j = i - 1 ; while(j >= 0 && temp < A[j]){ A[j+1] = A[j] ; j -- ; } A[j+1] = temp ; } }