大家都知道,排序算法是用来排序的,今天说一下比较简单的冒泡排序。
冒泡排序的思想很简单,就是大的向下走,小的向上飘,反映在我们需要排序的数据上就是大数字沉到后面,小数字飘去前面。
话不多说,直接上算法。
#include<stdio.h> #include<stdlib.h> //交换a,b两个数 void swap(int *a, int *b); //打印数组a void printArray(int *a, int n); //冒泡排序 //a为待排数组,n为数组a的大小 void bubbleSort(int *a, int n); int main() { int a[] = { 6,7,8,9,10,1,2,3,4,5 }; bubbleSort( a, 10); printArray(a, 10); return 0; } void bubbleSort(int *a, int n) { int i, j; //flag为是否发生交换的标志,默认为产生了 int flag; //i从最后一个开始, for (i = n - 1; i > 0; i--) { //默认没有产生交换 flag = 0; //j从零开始,慢慢的大数向后沉 for (j = 0; j < i; j++) { //若a[j]>a[j+1]的意思就是如果前面一个,比后面一个 //大的话,就交换 if (a[j] > a[j + 1]) { swap(&a[j], &a[j+1]); //产生了交换,标志位置1 flag = 1; } } //没有交换,就可以结束外层循环了,这也就是冒泡排序 //最优的时间复杂度是o(n)的原因了 if (!flag) break; } } //交换a,b两个数,这个不用多说 void swap(int *a, int *b) { int tmp = *a; *a = *b; *b = tmp; } //打印数组,也不需要多说 void printArray(int *a, int n) { int i = 0; for (i = 0; i < n; i++) { printf("%d\t", *(a + i)); } printf("\n"); }
这就是冒泡排序了,有说的不对的地方,请指出,然后告诉我哦!