选择排序和冒泡排序

2014-11-23 22:38:39 · 作者: · 浏览: 1

【选择排序和冒泡排序】

【算法】

蛮力法

选择排序,第一次扫描整个数组,找到最小元素,然后和第一个元素交换。第二次从第二个元素开始扫描数组,找到剩下的元素中最小的与第二个元素交换位置,直到最后。

| 89 45 68 90 29 34 17

17 | 45 68 90 29 34 89

17 29 | 68 90 45 34 89

17 29 34 | 90 45 68 89

17 29 34 45 | 90 68 89

17 29 34 45 68 | 90 89

17 29 34 45 68 89 | 90

冒泡排序,比较数组中的相邻元素,第一轮比较将最大元素沉到数组的最后一个位置。第二轮将第二大的元素沉到倒数第二的位置,直到最后。

89 45 68 90 29 34 17

45 89

68 89

29 90

34 90

17 | 90

45 68 89 29 34 17 | 90

.....

【时间复杂度】

O(n)=n平方

【代码】

#include 
  
   
#include 
   
     void swap(int *a, int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; } void SelectionSort(int *a, int n) { int i, j; int min; for(i = 0; i <= n - 2; i++) { min = i; for(j = i + 1; j <= n - 1; j++) if(a[j] < a[min]) min = j; if( i != min) swap(&a[i], &a[min]); } } void BubbleSort(int a[], int n) { bool flag; for(int i = 0; i <= n - 2; i++) { flag = true; for(int j = 0; j <= n - 2 - i; j++) if(a[j] > a[j + 1]) { flag = false; swap(&a[j], &a[j + 1]); } if(flag) break; } } int main(void) { int a[] = {3, 5, 7, 9, 2, 1}; int len; len = sizeof(a) / sizeof(int); printf("%d\n", len); //SelectionSort(a, len); BubbleSort(a, len); for(int i = 0; i < len; i++) printf("%d ",a[i]); return 0; }