C语言,插入排序如何从后面往前插?给出代码
时间: 2024-10-21 14:13:53 浏览: 15
在C语言中,如果想要使用插入排序算法但从后往前进行插入(通常称为反向插入排序),你可以简单地改变传统的插入过程,即每次从未排序的部分选取最后一个元素,将其与已排序部分的所有元素进行比较,然后逐个向前移动较大的元素来找到合适的位置。以下是反向插入排序的C语言代码示例:
```c
#include <stdio.h>
void reverseInsertionSort(int arr[], int size) {
int i, key, j;
for (i = size - 1; i >= 0; i--) { // 从最后一个元素开始
key = arr[i]; // 取当前未排序元素
j = i;
// 从前向后查找并插入位置
while (j > 0 && arr[j - 1] > key) {
arr[j] = arr[j - 1]; // 移动较大元素
j--;
}
arr[j] = key; // 将找到的正确位置插入元素
}
}
// 测试函数
void printArray(int arr[], int size) {
int i;
for (i = 0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
}
int main() {
int arr[] = {9, 7, 5, 11, 12, 2, 14};
int n = sizeof(arr) / sizeof(arr[0]);
printf("Original array:\n");
printArray(arr, n);
reverseInsertionSort(arr, n);
printf("Array after reverse insertion sort:\n");
printArray(arr, n);
return 0;
}
```
在这个例子中,我们从数组的最后一个元素开始,逐个向前移动,直到找到一个比当前值小的元素(或者到达数组的开头)。然后,我们将当前值插入到该位置,继续处理下一个未排序的元素,直到所有元素都被插入到正确的位置。
阅读全文