最近c语言就要学完了,现在对自己已经掌握的排序算法总结如下,其余算法以后再补上,希望大家一起进步!
1. 冒泡排序
int array[] = {8, 6, 5, 7, 9};
int count = sizeof(array) / sizeof(array[0]);
for (int i = 0; i < count - 1; i ++) {
for (int j = 0; j < count - i - 1; j ++) {
if (array[j] > array[j + 1]) {
int temp = 0;
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
2. 选择排序
int array[] = {3, 7, 8, 9,};
int count = sizeof(array) / sizeof(array[0]);
for (int i = 0; i < count - 1; i ++ ) {
int minIndex = i;
for (int j = i + 1; j < count; j ++) {
if (array[minIndex] > array[j]) {
minIndex = j;
}
}
if(minIndex == i) {
continue;
}
int temp = 0;
temp = array[i];
array[i] = array[minIndex];
array[minIndex] = temp;
}
3. 二路归并(前提必须有俩个有序数列)
int array1[] = {1, 3, 5, 7, 9};
int array2[] = {2, 4, 6, 8, 10};
int array[10] = {0};
int count1 = sizeof(array1) / sizeof(array1[0]);
int count2 = sizeof(array2) / sizeof(array2[0]);
int i = 0, j = 0; //定义array1和array2的下标初值
int a = 0; //定义array的初值下标
while (i < count1 && j < count2) {
if(array1[i] > array2[j]) {
array[a] = array2[j];
j ++;
a ++;
} else {
array[a] = array1[i];
i ++;
a ++;
}
}
while (i < count1) {
array[a] = array1[i];
i ++;
a ++;
}
while ( j < count2) {
array[a] = array2[j];
j ++;
a ++;
}