①冒泡法
version 1
普通排序
void bubble_sort_1(char a[],int len) { int i, j,tmp=0; for (i = 0; i < len-1; i++)//len-1就是总数减去1等于趟数 { for (j = 0; j < len - 1 - i; j++)//len-1-i是这一趟需要交换的次数 { if (a[j] > a[j+1]) { tmp = a[j+1]; a[j + 1] = a[j]; a[j] = tmp; } } } }
version 2
加入flag,减少运算
void bubble_sort_2(char b[], int len) { int i, j, tmp, flag = 1; for (i = 0; i < len - 1; i++) { for (j = 0; j < len - 1 - i; j++) { if (b[j] > b[j + 1]) { tmp = b[j + 1]; b[j + 1] = b[j]; b[j] = tmp; flag = 0; } } if (flag) break; } }
version 3
考虑到以下情况,例如:十个数0543216789这种后面已经有序
void bubble_sort_3(char c[],int len) { int i, j, tmp, sortborder = len - 1; int lastchange = 0,flag=1; for (i = 0; i < len - 1; i++) { for (j = 0; j < sortborder; j++) { if (c[j] > c[j+1]) { tmp = c[j+1]; c[j+1] = c[j]; c[j] = tmp; flag = 0; lastchange = j;//用lastchange记录最后一次交换的下标 } } sortborder = lastchange; if (flag) break; } }
————————————待更新