feat: Add Dart codes for chapter_backtracking and chapter_divide_and_conquer (#680)

* feat: Add Dart codes for chapter_backtracking

* feat: Add Dart codes for chapter_divide_and_conquer

* Format Dart Code
This commit is contained in:
liuyuxin
2023-08-10 23:48:56 +08:00
committed by GitHub
parent e97eee0e18
commit 4325974af1
19 changed files with 731 additions and 18 deletions

View File

@@ -8,7 +8,7 @@
void bubbleSort(List<int> nums) {
// 外循环:未排序区间为 [0, i]
for (int i = nums.length - 1; i > 0; i--) {
// 内循环:将未排序区间 [0, i] 中的最大元素交换至该区间的最右端
// 内循环:将未排序区间 [0, i] 中的最大元素交换至该区间的最右端
for (int j = 0; j < i; j++) {
if (nums[j] > nums[j + 1]) {
// 交换 nums[j] 与 nums[j + 1]
@@ -25,7 +25,7 @@ void bubbleSortWithFlag(List<int> nums) {
// 外循环:未排序区间为 [0, i]
for (int i = nums.length - 1; i > 0; i--) {
bool flag = false; // 初始化标志位
// 内循环:将未排序区间 [0, i] 中的最大元素交换至该区间的最右端
// 内循环:将未排序区间 [0, i] 中的最大元素交换至该区间的最右端
for (int j = 0; j < i; j++) {
if (nums[j] > nums[j + 1]) {
// 交换 nums[j] 与 nums[j + 1]

View File

@@ -13,7 +13,7 @@ void countingSortNaive(List<int> nums) {
for (int num in nums) {
m = max(m, num);
}
// 2. 统计各数字的出现次数
// 2. 统计各数字的出现次数
// counter[num] 代表 num 的出现次数
List<int> counter = List.filled(m + 1, 0);
for (int num in nums) {
@@ -54,7 +54,7 @@ void countingSort(List<int> nums) {
for (int i = n - 1; i >= 0; i--) {
int num = nums[i];
res[counter[num] - 1] = num; // 将 num 放置到对应索引处
counter[num]--; // 令前缀和自减 1 ,得到下次放置 num 的索引
counter[num]--; // 令前缀和自减 1 ,得到下次放置 num 的索引
}
// 使用结果数组 res 覆盖原数组 nums
nums.setAll(0, res);

View File

@@ -40,7 +40,7 @@ void countingSortDigit(List<int> nums, int exp) {
void radixSort(List<int> nums) {
// 获取数组的最大元素,用于判断最大位数
// dart 中 int 的长度是 64 位的
int m = -1 << 63;
int m = -1 << 63;
for (int num in nums) if (num > m) m = num;
// 按照从低位到高位的顺序遍历
for (int exp = 1; exp <= m; exp *= 10)
@@ -54,8 +54,18 @@ void radixSort(List<int> nums) {
/* Driver Code */
void main() {
// 基数排序
List<int> nums = [10546151, 35663510, 42865989, 34862445, 81883077,
88906420, 72429244, 30524779, 82060337, 63832996];
List<int> nums = [
10546151,
35663510,
42865989,
34862445,
81883077,
88906420,
72429244,
30524779,
82060337,
63832996
];
radixSort(nums);
print("基数排序完成后 nums = $nums");
}