本文章只對選擇排序和冒泡排序進行介紹數組
選擇排序其實是從0到length-1,選擇某個元素與其餘的元素進行大小比較,若是大於就交換,其餘狀況不作操做,如圖:函數
冒泡排序其實是先選擇某個元素,而後從最後一個元素依次往前比較(不超過選擇的元素),若是大於就交換,不然不變,如圖測試
`從圖能夠看出排序出的數彷彿是從地下往上冒出同樣,所以稱之爲冒泡排序法。選擇排序和冒泡排序算數複雜度都是n*n/2,效率不是過高spa
頭文件:code
#include<stdlib.h> #include<stdio.h> #include<string.h>
函數原型:blog
void sortA1(int a[], int length); //選擇排序 void sortA2(int a[], int length); //冒泡排序 void printA1(int a[], int length); //遍歷數組
實現函數:排序
void sortA1(int a[], int length){ int i, j, temp; for(i = 0; i < length; ++i){ for(j = i + 1; j < length; ++j){ if(a[j] < a[i]){ //若是後一個元素小於前一個元素則交換 temp = a[i]; a[i] = a[j]; a[j] = temp; } } } } void printA1(int a[], int length){ int i; for(i = 0; i < length; ++i){ printf("%d,", a[i]); } printf("\n"); } void sortA2(int a[], int length){ int i, j, temp; for(i = 0; i < length; ++i){ for(j = length - 1; j > i; --j){ if(a[j] > a[j - 1]){ temp = a[j]; a[j] = a[j - 1]; a[j - 1] = temp; } } } }
測試:原型
1 void main(){ 2 3 int length = 0; 4 5 int a[] = {12, 43, 8, 50, 100, 52,0}; 6 7 length = sizeof(a) / sizeof(a[0]); 8 9 printf("排序前\n"); 10 11 printA1(a, length); 12 13 sortA1(a, length); 14 15 printf("選擇排序後\n"); 16 17 printA1(a, length); 18 19 sortA2(a, length); 20 21 printf("冒泡排序後\n"); 22 23 printA1(a, length); 24 25 system("pause"); 26 }
運行結果:string