void BubbleSort(SqList *L) //SqList 是一个包含了一个数组,和该数组长度的结构体 { int i,j; for(i = 0; i < L->length; i++){ for(j = i+1; j < L->length; j++){ if(L->r[i] > L->r[j]){ swap(L,i,j); //交换函数 } } } }
这样的排序虽然可以实现排序,可是并不符合冒泡的原理。
正宗的冒泡排序算法:
void BubbleSort(SqList *L){ int i = 0, j = 0; for(i = 0; i < L->length; i++){ for(j = L->length-1; j > i; j--){ if(L->r[j] < L->r[j-1]){ swap(L,j,j-1); } } } }优化之后的排序算法:
void BubbleSort_good(SqList *L){ int i, j; int flag = 0; for(i = 0; i < L->length && flag == 0; i++){ flag = 1; for(j = L->length-1; j > i; j--){ if(L->r[j] < L->r[j-1]){ swap(L,j,j-1); flag = 0; } } } }
简单的选择排序思想是:每次比较找到最小值后交换
void SelectSort(SqList *L){ // simple selection sort int i,j,min; for(i = 0; i < L->length; i++){ min = i; for(j = i+1; j< L->length; j++){ if(L->r[min] > L->r[j]){ min = j; } } if(min != i){ swap(L,min,i); } } }
直接插入排序:将一个记录插入到已经排好的有序表中
void InsertSort(SqList *L){ int temp = 0; int i, j; for(i = 1; i < L->length; i++){ if(L->r[i] < L->r[i-1]){ temp = a[i]; for(j = i-1; j >= 0 && L->r[j] > temp; j--){ L->[j+1] = L->[j]; //记录后移 } L->[j+1] = temp; } } }