【发布时间】:2021-08-21 16:11:20
【问题描述】:
我刚开始学习 C 并遇到了插入排序算法。我现在正在尝试将其应用于字母。然而,我面临的挑战是,我希望程序能够独立地对字母进行分类,而不管它们是否大写。
例如,在排序列表中,“d”应位于“E”之前。这是我目前所拥有的。
感谢您的帮助。
#include <stdio.h>
#define MAX_NUMS 10
void InsertionSort(char list[]);
int main()
{
int index = 0; /* iteration variable */
char letters[MAX_NUMS]; /* list of number to be sorted */
/* Get input */
printf("Enter a word: ");
scanf("%s", letters);
printf("%s\n", letters);
InsertionSort(letters); /* Call sorting routine */
printf("pass");
/* Print sorted list */
printf("\nThe input set, in ascending order:\n");
while (letters[index] != '\0') {
printf("%c\n", letters[index]);
index += 1;
}
/* printf("%s", letters);
for (index = 0; index < MAX_NUMS; index++)
printf("%c\n", letters[index]); */
}
void InsertionSort(char list[])
{
int unsorted; /* index for unsorted list items */
int sorted; /* index for sorted items */
char unsortedItem; /* Current item to be sorted */
char lowUnsortedItem;
/* This loop iterates from 1 thru MAX_NUMS */
for (unsorted = 0; list[unsorted] != '\0'; unsorted++) {
unsortedItem = list[unsorted];
if (unsortedItem >= 'A' && unsortedItem <= 'Z') {
lowUnsortedItem = unsortedItem + 32;
}
/* This loop iterates from unsorted thru 0, unless
we hit an element smaller than current item */
for (sorted = unsorted - 1;
(sorted >= 0) && (list[sorted] > unsortedItem);
sorted--)
list[sorted + 1] = list[sorted];
list[sorted + 1] = unsortedItem; /* Insert item */
}
}
【问题讨论】:
-
'd'应该在'D'之前还是之后?还是说"dX"会在"DY"之前出现? -
'D' 会出现在 'd' 之前。请注意,该程序不会比较两个不同的字符串。如果您有任何问题,请告诉我。
标签: c insertion-sort