中心思想:
依次比较相邻的两个数.
时间复杂度:
其它博文都没有讲过的一个重要知识点:
两两相比, 每比一次,最后一个就会被排好序,因此每一次比较的长度逐渐减小
每轮都是从头开始比较
完整代码
#include <stdio.h> // 最好的情况,正序 // 最坏的情况,倒序 void PrintSort(int * a, int n) { int i; for (i=0; i<n; i++) { printf("%d ", a[i]); } printf(" "); } void PopSort(int * a, int n) { int flag = 0; int i, j; for (i=0; i<n-1; i++) { flag = 1; for (j=0; j<n-1-i; j++) { if (a[j+1] < a[j]) { flag = 0; a[j] = a[j] ^ a[j+1]; a[j+1] = a[j] ^ a[j+1]; a[j] = a[j] ^ a[j+1]; } } // 优化,如果没有可排序的数据,说明已经全部有序,没必要再继续比较 if (flag == 1) { printf("已排好序, i=%d : ", i); break; } } PrintSort(a, n); } int main() { int a[11] = {33, 40, 1, 14, 7, 35, 27, 9, 55, 80, 61}; PopSort(a, 11); int b[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; PopSort(b, 10); }