本文章只对选择排序和冒泡排序进行介绍
选择排序实际上是从0到length-1,选择某个元素与其他的元素进行大小比较,如果大于就交换,其他情况不做操作,如图:
冒泡排序实际上是先选择某个元素,然后从最后一个元素依次往前比较(不超过选择的元素),如果大于就交换,否则不变,如图
`从图可以看出排序出的数仿佛是从地下往上冒出一样,因此称之为冒泡排序法。选择排序和冒泡排序算数复杂度都是n*n/2,效率不是太高
头文件:
#include<stdlib.h> #include<stdio.h> #include<string.h>
函数原型:
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(" "); } 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("排序前 "); 10 11 printA1(a, length); 12 13 sortA1(a, length); 14 15 printf("选择排序后 "); 16 17 printA1(a, length); 18 19 sortA2(a, length); 20 21 printf("冒泡排序后 "); 22 23 printA1(a, length); 24 25 system("pause"); 26 }
运行结果: