分類: 演算法導論
2012-06-23 15:14
298人閱讀收藏
舉報演算法
delete
stringc測試
ie 目錄(?)
[+]
a)給定乙個整數陣列,其中不同的整數中包含的數字個數可能不同,但是該陣列中,所有整數中總的數字數為n。說明如何在o(n)時間內對該陣列進行排序
b)給定乙個字串陣列,其中不同的串包含的字元個數可能不同,但所有串中總的字元個數為n。說明如何在o(n)時間內對該陣列進行排序
(注意此處的順序是指標準的字母順序,例如,a < ab < b)
a)先用計數排序演算法按數字位數排序o(n),再用基數排序的方法分別對每個桶中的元素排序o(n)
b)遞迴使用計數排序,先依據第乙個字母進行排序,首字相同的放在同一組,再對每一組分別使用計數排序的方法比較第二個字母
見到有人用字典樹,也是可以的,見
演算法導論-12-2-基數樹
[cpp]view plain
copy
//8-2-a
#include
#include
using
namespace
std;
intlength_a;
void
print(
int*a)
intdigit(
intx)
return
ret;
} //基數排序呼叫的穩定排序
void
counting_sort(
int*a,
int*b,
intk)
//c[i]表示所以<=i的數字出現過的次數
for(i = 1; i <= k; i++)
c[i] = c[i] + c[i-1];
//初始化b為0,b用於輸出排序結果
for(i = 1; i <= length_a; i++)
b[i] = 0;
for(j = length_a; j >= 1; j--)
delete
c;
delete
d;
} //基數排序呼叫的穩定排序
void
stable_sort(
int*a,
int*b,
intk,
intd,
intstart,
intend)
//c[i]表示所以<=i的數字出現過的次數
for(i = 1; i <= k; i++)
c[i] = c[i] + c[i-1];
//初始化b為0,b用於輸出排序結果
for(i = 1; i <= length_a; i++)
b[i] = 0;
for(j = end; j >= start; j--)
delete
c;
delete
d;
} void
radix_sort(
int*a,
int*b,
intk ,
intdigit,
intstart,
intend)
} intmain()
else
} } delete
a;
delete
b;
}
[cpp]view plain
copy
#include
#include
using
namespace
std;
intlength_a;
void
print(string *a)
//基數排序呼叫的穩定排序,a是輸入,b是中間輸出,c是計數,d表示對第d位字母排序,start和end分別是排序段的起點和終點
void
counting_sort(string *a, string *b,
int*c,
intd,
intstart,
intend)
//c[i]表示所以<=i的數字出現過的次數
for(i = 1; i <= 26; i++)
c[i] = c[i] + c[i-1];
//初始化b為0,b用於輸出排序結果
for(i = 1; i <= length_a; i++)
b[i] = ""
; for
(j = end; j >= start; j--)
delete
d;
//輸出轉為輸入
for(i = start; i <= end; i++)
a[i] = b[i];
char
c =
'a';
ints, e;
//進一步的排序以s為起點,e為終點
//對於排序的這一段,對下乙個字母遞迴使用計數排序
for(i = start; i <= end; i++)
else
else
} } }
intmain()
print(a);
string *b = new
string[length_a+1];
int*c =
newint
[26];
//計數排序
counting_sort(a, b, c, 0, 1, length_a);
print(a);
delete
a;
delete
c;
return
0;
}
四、效果:
演算法導論習題8 3 排序不同長度的資料項
題目 a 給定乙個整數陣列,其中不同的整數中包含的數字個數可能不同,但是該陣列中,所有整數中總的數字數為n。說明如何在o n 時間內對該陣列進行排序 b 給定乙個字串陣列,其中不同的串包含的字元個數可能不同,但所有串中總的字元個數為n。說明如何在o n 時間內對該陣列進行排序 注意此處的順序是指標準...
演算法導論習題8 3 排序不同長度的資料項
題目 a 給定乙個整數陣列,其中不同的整數中包含的數字個數可能不同,但是該陣列中,所有整數中總的數字數為n。說明如何在o n 時間內對該陣列進行排序 b 給定乙個字串陣列,其中不同的串包含的字元個數可能不同,但所有串中總的字元個數為n。說明如何在o n 時間內對該陣列進行排序 注意此處的順序是指標準...
演算法導論 1 排序演算法
排序演算法是最基礎的一類演算法。主要排序演算法包括選擇排序 插入排序 氣泡排序 合併排序 堆排序和快速排序。把這些排序演算法全部實現一邊,再把 演算法導論 對應章節後面的習題做一遍,確實是系統學習演算法的乙個不錯的開端。選擇排序的想法很簡單,把需要排序的陣列看成一堆撲克牌 先查一遍,抽出最小的作為第...