1.冒泡排序
void bubble_sort(int array[], int length)
{
int inner = 0, outer = 0;
int median = 0;
int flag = 1;
if(NULL == array || 0 == length)
return;
for(outer = length-1; outer >= 1 && flag; outer --){
flag = 0;<span style="white-space:pre"> </span>//因为,当如果遍历一遍之后,没有发生移位,则无需继续。
for(inner = 0; inner < outer; inner ++){
if(array[inner] > array[inner + 1]){<span style="white-space:pre"> </span>//将大的数据放在后端
median = array[inner];
array[inner] = array[inner + 1];
array[inner + 1] = median;
if(flag == 0)
flag = 1;
}
}
}
}
2.插入排序
void insert_sort(int a[], int n){ //此插入排序,使用了交换法,替代移位法,总体思路是一致的
int i = 0, j = 0;
for (i = 1; i < n; i++){
for (j = i; j >= 0; j--){
if (a[j] < a[j - 1]){
swap(&a[j], &a[j - 1]);
}
else
break;
}
}
}
3.希尔排序
void shell_sort(int a[], int n){
int dk = n / 2; //初始增量选择n/2
while (dk >= 1){
for (int i = dk; i < n; i++){
if (a[i] < a[i - dk]){
int j = i - dk;
int k = a[i];
while (k < a[j]){
a[j + dk] = a[j];
j = j - dk;
}
a[j + dk] = k;
}
}
dk = dk / 2;
}
}