C语言 有人能解释一下这个排序算法是如何工作的,这个算法的名字是什么?



我已经创建了一个排序函数。我能知道这个算法的名字吗?这是冒泡排序吗?

I am new in C.

#include <stdio.h>
void sort(int *, int);
int main(void) {
int arrayNum[] = {1, 12, 8, 4, 90, 11, 76};
int len = sizeof(arrayNum) / sizeof(arrayNum[0]);
sort(arrayNum, len);
for (int i = 0; i < len; i++) {
printf("%d, ", arrayNum[i]);
}

return 0;
}
void sort(int *array, int length) {
int temp;
for (int i = 0; i < length; i++) {
for (int j = 0; j < length; j++) {
if (array[i] < array[j]) {
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}

不,不是冒泡排序。它不会比较相邻的元素,也不会在数组被排序时执行任何检查以停止遍历。

它类似于交换排序,可以像下面这样实现(但请注意差异):

for (int i = 0; i < length; i++) {
// At every step, searches the minimum of the remaining elements     
for (int j = i + 1; j < length; j++) {
//       ^^^^^                          It doesn't touch the already sorted
if ( array[j] < array[i] ) {
//    ^^^        ^^^                To sort the array in ascending order
/* swap array[j] and array[i] */
}
}
}

我认为发布的算法更类似于插入排序。看看它是如何转换数组的:

<>之前的起点1,12,8,4,90,11,76把1换成12,然后把12换成90。90 1 8 4 12 11 76把90换成1。1,90,8,4,12,11,76把90和8互换。换句话说,它在已经排序的分区中"插入"8。1,8,90,4,12,11,76插入4(它首先交换8和4,然后交换90和8)。1,4,8,90,12,11,76插入12(交换90和12)。1,4,8,12,90,11,76插入11(交换12和11,然后交换90和11)。1,4,8,11,12,90,76插入76(交换90和76),然后结束。1、4、8、11、12、76、90

我不认为它有一个名字,但它在这篇论文中有描述:"这是最简单的(也是最令人惊讶的)排序算法吗?"冯佩玉

最新更新