![](/img/trans.png)
[英]How can I compute a base 2 logarithm without using the built-in math functions in C#?
[英]How to sort multiple strings alphabetically without using built-in functions
我必須按字母順序排序一組沒有任何內置函數的字符串,然后將它們打印在屏幕上。 我曾嘗試將字符串的第一個char轉換為數字值,然后將該值與字符串的其他第一個char進行比較,但我認為這不是一個好選擇。
(像這樣)
for (int i = 0; i < numberOfStrings; i++)
{
for (int j = i + 1; j < numberOfStrings; j++)
{
if ((int)string1[i] > (int)string2[i]
{
biggestFirstChar = (int)string1[i];
}
}
}
因此,我想知道在沒有任何功能的情況下按字母順序對多個字符串進行排序的簡便方法是什么。 這是學校的作業。
由於這是一個家庭作業問題,因此我將給出一個有效的答案,而不是實際的代碼版本...
注意:您當然可以查找現有的排序算法並加以實施; 但就我個人而言,我更喜歡上述內容,因為它可以教您自己思考,而不是將現有算法翻譯成您的特定編碼語言。
在進行比較時,請考慮您需要做什么。 即,您上面已經問過有關在比較字符串之前將字符串中的字符轉換為數字的問題。 需要該步驟嗎? 您不能簡單地按字母順序比較字符串嗎? https://www.google.co.uk/search?q=c%23+compare+strings+按字母順序
在提供的代碼示例中,您具有值string1
和string2
,但從未展示它們的值是如何分配的...是否需要在對變量進行比較之前/在何時何地分配這些變量時是否需要為其分配值發生?
您還會有一個分配了整數j
的循環...您將在哪里使用該值/除非要使用它,否則給它分配值的意義是什么?
同樣,您有一個變量biggestFirstChar
,您可以為其分配一個值,但不執行任何操作。 是否需要/您將在哪里使用它?
您得到的結果是一個排序后的值列表,然后您希望將其輸出。 您將結果保存在哪里/按順序輸出結果的代碼在哪里?
您想如何建立結果列表? 也就是說,您是否可以一次填充所有內容,還是必須逐個修改它,直到所有項目都按順序進行?
此外,將問題分解為多個部分並測試每個部分和/或考慮其含義。 即
Aardvark, Balloon
和Balloon, Aardvark
)都可以。 您需要兩種方法,冒泡排序(或任何排序算法)和字符串比較算法。
您已經知道冒泡排序,所以我去比較字符串。
int Compare(string x, string y)
{
if(x == y) return 0;
if(x == null) return -1;
if(y == null) return 1;
int i = 0;
int length = x.Length <= y.Length ? x.Length : y.Length;
while(i < length)
{
if(x[i] > y[i]) return 1;
if(x[i] < y[i]) return -1;
i++;
}
if(x.Length == y.Length) return 0;
if(x.Length > y.Length) return 1;
else return -1;
}
只需在氣泡排序算法中使用此比較算法即可。
比較兩個字符串
if(Compare(str1, str2) >= 0)
{
// str1 is bigger or equal
}
else
{
// str2 is bigger.
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.