我正在尝试使用选择排序和指针对结构数组进行排序,但我遇到了一些麻烦。
当我尝试打印数组以查看名称是否已排序时,所有名称都会被排序,但第一个位置的名称除外(未排序)。
/*
all is the unordered array of struct; pLast is pointer to the last struct in array.
*/
void sortArray(CASE* all, CASE* pLast)
{
CASE* current;
CASE* walker;
CASE* smallest;
CASE temp;
for(current = all; current < pLast; current++)
{
smallest = current;
for (walker = current + 1; walker <= pLast; walker++)
{
if(strcmp(walker->name, smallest->name) < 0 )
smallest = walker;
}
temp = *current;
*current = *smallest;
*smallest = temp;
}
for(walker = all; walker <= pLast; walker++)
{
printf("%s\n", walker->name);
}
return;
}
任何提示?
由于
编辑:允许打印名称但未完全排序的主要修订
答案 0 :(得分:2)
作为一个简单的算法,选择排序看起来总是这样:
function selection_sort(arr):
for i in 0..len(arr)-1:
smallest = i
for j in i+1..len(arr)-1:
if arr[j] < arr[smallest]:
smallest = j
swap i and smallest.
如果使用指针,实现仍将使用此格式(或非常接近)。
答案 1 :(得分:0)
有没有理由不使用qsort?
不幸的是你不写struct CASE*
是什么;我们只知道它包含一个字段名称
所以你可以写一个比较函数,如:
int case_struct_comparison_function (const void * v1, const void * v2) {
const struct CASE * case_1 = v1;
const struct CASE * case_2 = v2;
return strcmp(case_1->name, case_2->name);
}
qsort(arr, size_of_arr, sizeof(struct CASE), case_struct_comparison_function);
这是未经测试但应该给你一个想法。