我是計算機科學專業的學生,??我必須使用插入排序來排序單詞串列。我試圖調整數字的插入排序,但顯然我的代碼只對每個單詞的第一個字母進行排序。關于如何解決這個問題,我能從你那里得到一些想法嗎?
注意:考慮順序 A>B>C>....>Z>a>b>c>.....>z
#include <stdio.h>
#include <stdlib.h>
void insertionSort (char **words, int n) {
int i, j;
char key;
/* a cada itera??o, teremos o vetor A[1..i] ordenado */
/* come?amos de A[i], porque obviamente o vetor em A[0..0] está
trivialmente ordenado */
for(i=1;i<n;i ){
key=words[i][0];
j=i-1;
while(j>=0 && words[j][0]>key){
words[j 1][0]=words[j][0];
j=j-1;
}
words[j 1][0]=key;
}
}
int main() {
int i, n;
char **words;
printf("Insert the number of words: \n");
scanf("%d", &n);
words=malloc(n*sizeof(char*));
for(i=0;i<n;i ){
words[i]=malloc(10*sizeof(char));
}
for(i=0;i<n;i ){
scanf("%s", words[i]);
}
insertionSort(words,n);
for(i=0;i<n;i ){
printf("%s", words[i]);
printf("\n");
}
for(i=0;i<n;i ){
free(words[i]);
}
free(words);
return 0;
}
例./insertion
插入字數
:
5
灰色
藍色
白色
綠色
紅色
我得到這個作為輸出:
brey
gel
ghite
rreen
wed
但我想要
這個
:
藍綠
灰
紅白
uj5u.com熱心網友回復:
你的演算法有錯誤。
不是比較字串,而是比較字串的第一個字符。那是因為你使用words[idx][0]了所有的代碼。相反,您應該使用strcmp()函式 fromstring.h來比較字串。
然后insertionSort函式看起來像這樣:
void insertionSort(char **words, int n) {
int i, j;
char *key;
for (i = 1; i < n; i ) {
key = words[i];
j = i - 1;
while (j >= 0 && strcmp(words[j], key) > 0) {
words[j 1] = words[j];
j = j - 1;
}
words[j 1] = key;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/529488.html
標籤:C排序
上一篇:根據r中的數值排列列
