利用指针和数组编写一个函数,实现以下功能利用指针和数组编写一个函数,实现以下功能
利用指针和数组编写一个函数,实现以下功能
功能:直接插入排序
输入:数组名称(也就是数组首地址)、数组中元素个数=======================================
算法思想简单描述:
在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
在函数中利用指针进行排序
能不能用C语言,编个简单点的,这个看不懂
这个程序就是C语言写的,没有问题,你可以运行轮拆一下看看。我把“在函数中利用指针进行排序”闹模看成“利用函数指针进行排序了”。。。。所以写成了这样子。按你的要求程序就简单多了。。。。我现在没有时间改的说。液桐缓你找一段插入排序的代码,自己改一下吧。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define GET(arr, des, esize) (void *)((char *)(arr) + ((des) * (esize)))
int cmp(const void *e1, const void *e2)
{
return *(int *)e1 - *(int *)e2;
}
void insert_sort(void *arr, size_t esize, int nsize, int (*cmp)(const void *e1, const void *e2))
{
void *temp = malloc(esize);
int i, j;
for (i = 1; i < nsize; i++)
{
for (j = i - 1; j >= 0; j--)
{
if (cmp(GET(arr, j, esize), GET(arr, i, esize)) <= 0)
break;
}
if (i != j + 1) {
memcpy(temp, GET(arr, i, esize), esize);
memmove(GET(arr, j + 2, esize), GET(arr, j + 1, esize), (i - j - 1) * esize);
memcpy(GET(arr, j + 1, esize), temp, esize);
}
}
free(temp);
}
int main()
{
int arr[10];
for (int i = 0; i < 10; i++)
arr[i] = 9 - i;
insert_sort(arr, sizeof(int), 10, cmp);
for (int i = 0; i < 10; i++)
printf("%d ", arr[i]);
printf("\n");
}