pub const SORTING: &str = "// stdlib/sorting.aether\n// Aether \u{6392}\u{5e8f}\u{7b97}\u{6cd5}\u{5e93}\n// \u{63d0}\u{4f9b}\u{591a}\u{79cd}\u{6392}\u{5e8f}\u{7b97}\u{6cd5}\u{ff0c}\u{652f}\u{6301}\u{6570}\u{7ec4}\u{6392}\u{5e8f}\n\n// ==================== \u{8f85}\u{52a9}\u{51fd}\u{6570} ====================\n\n// \u{4ea4}\u{6362}\u{6570}\u{7ec4}\u{4e2d}\u{4e24}\u{4e2a}\u{5143}\u{7d20}\nFunc SORT_SWAP(ARR, I, J) {\n Set TEMP ARR[I]\n Set NEW_ARR []\n Set K 0\n Set LEN_ LEN(ARR)\n \n While (K < LEN_) {\n If (K == I) {\n Set NEW_ARR PUSH(NEW_ARR, ARR[J])\n } Else {\n If (K == J) {\n Set NEW_ARR PUSH(NEW_ARR, TEMP)\n } Else {\n Set NEW_ARR PUSH(NEW_ARR, ARR[K])\n }\n }\n Set K (K + 1)\n }\n \n Return NEW_ARR\n}\n\n// \u{590d}\u{5236}\u{6570}\u{7ec4}\nFunc SORT_COPY_ARRAY(ARR) {\n Set RESULT []\n Set LEN_ LEN(ARR)\n Set I 0\n \n While (I < LEN_) {\n Set RESULT PUSH(RESULT, ARR[I])\n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// \u{83b7}\u{53d6}\u{6570}\u{7ec4}\u{5207}\u{7247}\nFunc SORT_SLICE(ARR, START, END) {\n Set RESULT []\n Set I START\n \n While (I < END && I < LEN(ARR)) {\n Set RESULT PUSH(RESULT, ARR[I])\n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// ==================== \u{5192}\u{6ce1}\u{6392}\u{5e8f} ====================\n\n// \u{5192}\u{6ce1}\u{6392}\u{5e8f}\u{ff08}\u{5347}\u{5e8f}\u{ff09}\nFunc BUBBLE_SORT(ARR) {\n Set SORTED SORT_COPY_ARRAY(ARR)\n Set LEN_ LEN(SORTED)\n Set I 0\n \n While (I < LEN_) {\n Set J 0\n While (J < (LEN_ - I - 1)) {\n If (SORTED[J] > SORTED[J + 1]) {\n Set SORTED SORT_SWAP(SORTED, J, J + 1)\n }\n Set J (J + 1)\n }\n Set I (I + 1)\n }\n \n Return SORTED\n}\n\n// \u{5192}\u{6ce1}\u{6392}\u{5e8f}\u{ff08}\u{964d}\u{5e8f}\u{ff09}\nFunc BUBBLE_SORT_DESC(ARR) {\n Set SORTED SORT_COPY_ARRAY(ARR)\n Set LEN_ LEN(SORTED)\n Set I 0\n \n While (I < LEN_) {\n Set J 0\n While (J < (LEN_ - I - 1)) {\n If (SORTED[J] < SORTED[J + 1]) {\n Set SORTED SORT_SWAP(SORTED, J, J + 1)\n }\n Set J (J + 1)\n }\n Set I (I + 1)\n }\n \n Return SORTED\n}\n\n// ==================== \u{9009}\u{62e9}\u{6392}\u{5e8f} ====================\n\n// \u{9009}\u{62e9}\u{6392}\u{5e8f}\u{ff08}\u{5347}\u{5e8f}\u{ff09}\nFunc SELECTION_SORT(ARR) {\n Set SORTED SORT_COPY_ARRAY(ARR)\n Set LEN_ LEN(SORTED)\n Set I 0\n \n While (I < LEN_) {\n Set MIN_IDX I\n Set J (I + 1)\n \n While (J < LEN_) {\n If (SORTED[J] < SORTED[MIN_IDX]) {\n Set MIN_IDX J\n }\n Set J (J + 1)\n }\n \n If (MIN_IDX != I) {\n Set SORTED SORT_SWAP(SORTED, I, MIN_IDX)\n }\n \n Set I (I + 1)\n }\n \n Return SORTED\n}\n\n// \u{9009}\u{62e9}\u{6392}\u{5e8f}\u{ff08}\u{964d}\u{5e8f}\u{ff09}\nFunc SELECTION_SORT_DESC(ARR) {\n Set SORTED SORT_COPY_ARRAY(ARR)\n Set LEN_ LEN(SORTED)\n Set I 0\n \n While (I < LEN_) {\n Set MAX_IDX I\n Set J (I + 1)\n \n While (J < LEN_) {\n If (SORTED[J] > SORTED[MAX_IDX]) {\n Set MAX_IDX J\n }\n Set J (J + 1)\n }\n \n If (MAX_IDX != I) {\n Set SORTED SORT_SWAP(SORTED, I, MAX_IDX)\n }\n \n Set I (I + 1)\n }\n \n Return SORTED\n}\n\n// ==================== \u{63d2}\u{5165}\u{6392}\u{5e8f} ====================\n\n// \u{63d2}\u{5165}\u{6392}\u{5e8f}\u{ff08}\u{5347}\u{5e8f}\u{ff09}\nFunc INSERTION_SORT(ARR) {\n Set SORTED SORT_COPY_ARRAY(ARR)\n Set LEN_ LEN(SORTED)\n Set I 1\n \n While (I < LEN_) {\n Set KEY SORTED[I]\n Set J (I - 1)\n \n While (J >= 0 && SORTED[J] > KEY) {\n // \u{5411}\u{53f3}\u{79fb}\u{52a8}\u{5143}\u{7d20}\n Set NEW_ARR []\n Set K 0\n While (K < LEN_) {\n If (K == (J + 1)) {\n Set NEW_ARR PUSH(NEW_ARR, SORTED[J])\n } Else {\n Set NEW_ARR PUSH(NEW_ARR, SORTED[K])\n }\n Set K (K + 1)\n }\n Set SORTED NEW_ARR\n Set J (J - 1)\n }\n \n // \u{63d2}\u{5165} KEY\n Set NEW_ARR []\n Set K 0\n While (K < LEN_) {\n If (K == (J + 1)) {\n Set NEW_ARR PUSH(NEW_ARR, KEY)\n } Else {\n Set NEW_ARR PUSH(NEW_ARR, SORTED[K])\n }\n Set K (K + 1)\n }\n Set SORTED NEW_ARR\n \n Set I (I + 1)\n }\n \n Return SORTED\n}\n\n// \u{63d2}\u{5165}\u{6392}\u{5e8f}\u{ff08}\u{964d}\u{5e8f}\u{ff09}\nFunc INSERTION_SORT_DESC(ARR) {\n Set SORTED SORT_COPY_ARRAY(ARR)\n Set LEN_ LEN(SORTED)\n Set I 1\n \n While (I < LEN_) {\n Set KEY SORTED[I]\n Set J (I - 1)\n \n While (J >= 0 && SORTED[J] < KEY) {\n // \u{5411}\u{53f3}\u{79fb}\u{52a8}\u{5143}\u{7d20}\n Set NEW_ARR []\n Set K 0\n While (K < LEN_) {\n If (K == (J + 1)) {\n Set NEW_ARR PUSH(NEW_ARR, SORTED[J])\n } Else {\n Set NEW_ARR PUSH(NEW_ARR, SORTED[K])\n }\n Set K (K + 1)\n }\n Set SORTED NEW_ARR\n Set J (J - 1)\n }\n \n // \u{63d2}\u{5165} KEY\n Set NEW_ARR []\n Set K 0\n While (K < LEN_) {\n If (K == (J + 1)) {\n Set NEW_ARR PUSH(NEW_ARR, KEY)\n } Else {\n Set NEW_ARR PUSH(NEW_ARR, SORTED[K])\n }\n Set K (K + 1)\n }\n Set SORTED NEW_ARR\n \n Set I (I + 1)\n }\n \n Return SORTED\n}\n\n// ==================== \u{5f52}\u{5e76}\u{6392}\u{5e8f} ====================\n\n// \u{5408}\u{5e76}\u{4e24}\u{4e2a}\u{5df2}\u{6392}\u{5e8f}\u{7684}\u{6570}\u{7ec4}\u{ff08}\u{5347}\u{5e8f}\u{ff09}\nFunc MERGE_SORTED(LEFT, RIGHT) {\n Set RESULT []\n Set I 0\n Set J 0\n Set LEFT_LEN LEN(LEFT)\n Set RIGHT_LEN LEN(RIGHT)\n \n While (I < LEFT_LEN && J < RIGHT_LEN) {\n If (LEFT[I] <= RIGHT[J]) {\n Set RESULT PUSH(RESULT, LEFT[I])\n Set I (I + 1)\n } Else {\n Set RESULT PUSH(RESULT, RIGHT[J])\n Set J (J + 1)\n }\n }\n \n While (I < LEFT_LEN) {\n Set RESULT PUSH(RESULT, LEFT[I])\n Set I (I + 1)\n }\n \n While (J < RIGHT_LEN) {\n Set RESULT PUSH(RESULT, RIGHT[J])\n Set J (J + 1)\n }\n \n Return RESULT\n}\n\n// \u{5408}\u{5e76}\u{4e24}\u{4e2a}\u{5df2}\u{6392}\u{5e8f}\u{7684}\u{6570}\u{7ec4}\u{ff08}\u{964d}\u{5e8f}\u{ff09}\nFunc MERGE_SORTED_DESC(LEFT, RIGHT) {\n Set RESULT []\n Set I 0\n Set J 0\n Set LEFT_LEN LEN(LEFT)\n Set RIGHT_LEN LEN(RIGHT)\n \n While (I < LEFT_LEN && J < RIGHT_LEN) {\n If (LEFT[I] >= RIGHT[J]) {\n Set RESULT PUSH(RESULT, LEFT[I])\n Set I (I + 1)\n } Else {\n Set RESULT PUSH(RESULT, RIGHT[J])\n Set J (J + 1)\n }\n }\n \n While (I < LEFT_LEN) {\n Set RESULT PUSH(RESULT, LEFT[I])\n Set I (I + 1)\n }\n \n While (J < RIGHT_LEN) {\n Set RESULT PUSH(RESULT, RIGHT[J])\n Set J (J + 1)\n }\n \n Return RESULT\n}\n\n// \u{5f52}\u{5e76}\u{6392}\u{5e8f}\u{ff08}\u{5347}\u{5e8f}\u{ff09}\nFunc MERGE_SORT(ARR) {\n Set LEN_ LEN(ARR)\n \n If (LEN_ <= 1) {\n Return ARR\n }\n \n Set MID FLOOR(LEN_ / 2)\n Set LEFT SORT_SLICE(ARR, 0, MID)\n Set RIGHT SORT_SLICE(ARR, MID, LEN_)\n \n Set LEFT_SORTED MERGE_SORT(LEFT)\n Set RIGHT_SORTED MERGE_SORT(RIGHT)\n \n Return MERGE_SORTED(LEFT_SORTED, RIGHT_SORTED)\n}\n\n// \u{5f52}\u{5e76}\u{6392}\u{5e8f}\u{ff08}\u{964d}\u{5e8f}\u{ff09}\nFunc MERGE_SORT_DESC(ARR) {\n Set LEN_ LEN(ARR)\n \n If (LEN_ <= 1) {\n Return ARR\n }\n \n Set MID FLOOR(LEN_ / 2)\n Set LEFT SORT_SLICE(ARR, 0, MID)\n Set RIGHT SORT_SLICE(ARR, MID, LEN_)\n \n Set LEFT_SORTED MERGE_SORT_DESC(LEFT)\n Set RIGHT_SORTED MERGE_SORT_DESC(RIGHT)\n \n Return MERGE_SORTED_DESC(LEFT_SORTED, RIGHT_SORTED)\n}\n\n// ==================== \u{5feb}\u{901f}\u{6392}\u{5e8f} ====================\n\n// \u{5feb}\u{901f}\u{6392}\u{5e8f}\u{5206}\u{533a}\u{51fd}\u{6570}\u{ff08}\u{5347}\u{5e8f}\u{ff09}\nFunc QUICK_SORT_PARTITION(ARR, LOW, HIGH) {\n Set PIVOT ARR[HIGH]\n Set I (LOW - 1)\n Set J LOW\n Set CURRENT ARR\n \n While (J < HIGH) {\n If (CURRENT[J] <= PIVOT) {\n Set I (I + 1)\n Set CURRENT SORT_SWAP(CURRENT, I, J)\n }\n Set J (J + 1)\n }\n \n Set CURRENT SORT_SWAP(CURRENT, I + 1, HIGH)\n Return {\"array\": CURRENT, \"pivot_index\": (I + 1)}\n}\n\n// \u{5feb}\u{901f}\u{6392}\u{5e8f}\u{8f85}\u{52a9}\u{51fd}\u{6570}\u{ff08}\u{5347}\u{5e8f}\u{ff09}\nFunc QUICK_SORT_HELPER(ARR, LOW, HIGH) {\n If (LOW < HIGH) {\n Set PARTITION_RESULT QUICK_SORT_PARTITION(ARR, LOW, HIGH)\n Set ARR PARTITION_RESULT[\"array\"]\n Set PI PARTITION_RESULT[\"pivot_index\"]\n \n Set ARR QUICK_SORT_HELPER(ARR, LOW, PI - 1)\n Set ARR QUICK_SORT_HELPER(ARR, PI + 1, HIGH)\n }\n \n Return ARR\n}\n\n// \u{5feb}\u{901f}\u{6392}\u{5e8f}\u{ff08}\u{5347}\u{5e8f}\u{ff09}\nFunc QUICK_SORT(ARR) {\n Set LEN_ LEN(ARR)\n If (LEN_ <= 1) {\n Return ARR\n }\n \n Set SORTED SORT_COPY_ARRAY(ARR)\n Return QUICK_SORT_HELPER(SORTED, 0, LEN_ - 1)\n}\n\n// \u{5feb}\u{901f}\u{6392}\u{5e8f}\u{5206}\u{533a}\u{51fd}\u{6570}\u{ff08}\u{964d}\u{5e8f}\u{ff09}\nFunc QUICK_SORT_PARTITION_DESC(ARR, LOW, HIGH) {\n Set PIVOT ARR[HIGH]\n Set I (LOW - 1)\n Set J LOW\n Set CURRENT ARR\n \n While (J < HIGH) {\n If (CURRENT[J] >= PIVOT) {\n Set I (I + 1)\n Set CURRENT SORT_SWAP(CURRENT, I, J)\n }\n Set J (J + 1)\n }\n \n Set CURRENT SORT_SWAP(CURRENT, I + 1, HIGH)\n Return {\"array\": CURRENT, \"pivot_index\": (I + 1)}\n}\n\n// \u{5feb}\u{901f}\u{6392}\u{5e8f}\u{8f85}\u{52a9}\u{51fd}\u{6570}\u{ff08}\u{964d}\u{5e8f}\u{ff09}\nFunc QUICK_SORT_HELPER_DESC(ARR, LOW, HIGH) {\n If (LOW < HIGH) {\n Set PARTITION_RESULT QUICK_SORT_PARTITION_DESC(ARR, LOW, HIGH)\n Set ARR PARTITION_RESULT[\"array\"]\n Set PI PARTITION_RESULT[\"pivot_index\"]\n \n Set ARR QUICK_SORT_HELPER_DESC(ARR, LOW, PI - 1)\n Set ARR QUICK_SORT_HELPER_DESC(ARR, PI + 1, HIGH)\n }\n \n Return ARR\n}\n\n// \u{5feb}\u{901f}\u{6392}\u{5e8f}\u{ff08}\u{964d}\u{5e8f}\u{ff09}\nFunc QUICK_SORT_DESC(ARR) {\n Set LEN_ LEN(ARR)\n If (LEN_ <= 1) {\n Return ARR\n }\n \n Set SORTED SORT_COPY_ARRAY(ARR)\n Return QUICK_SORT_HELPER_DESC(SORTED, 0, LEN_ - 1)\n}\n\n// ==================== \u{5806}\u{6392}\u{5e8f} ====================\n// \u{6ce8}\u{610f}\u{ff1a}\u{5806}\u{6392}\u{5e8f}\u{529f}\u{80fd}\u{5df2}\u{79fb}\u{81f3} heap.aether\n// \u{8bf7}\u{4f7f}\u{7528} HEAP_SORT_ASC \u{548c} HEAP_SORT_DESC \u{51fd}\u{6570}\n\n// ==================== \u{8ba1}\u{6570}\u{6392}\u{5e8f} ====================\n\n// \u{8ba1}\u{6570}\u{6392}\u{5e8f}\u{ff08}\u{4ec5}\u{9002}\u{7528}\u{4e8e}\u{975e}\u{8d1f}\u{6574}\u{6570}\u{ff0c}\u{5347}\u{5e8f}\u{ff09}\nFunc COUNTING_SORT(ARR) {\n Set LEN_ LEN(ARR)\n If (LEN_ <= 1) {\n Return ARR\n }\n \n // \u{627e}\u{5230}\u{6700}\u{5927}\u{503c}\n Set MAX ARR[0]\n Set I 1\n While (I < LEN_) {\n If (ARR[I] > MAX) {\n Set MAX ARR[I]\n }\n Set I (I + 1)\n }\n \n // \u{521b}\u{5efa}\u{8ba1}\u{6570}\u{6570}\u{7ec4}\n Set COUNT_SIZE (FLOOR(MAX) + 1)\n Set COUNT []\n Set I 0\n While (I < COUNT_SIZE) {\n Set COUNT PUSH(COUNT, 0)\n Set I (I + 1)\n }\n \n // \u{7edf}\u{8ba1}\u{6bcf}\u{4e2a}\u{5143}\u{7d20}\u{51fa}\u{73b0}\u{7684}\u{6b21}\u{6570}\n Set I 0\n While (I < LEN_) {\n Set VAL FLOOR(ARR[I])\n Set OLD_COUNT COUNT[VAL]\n Set NEW_COUNT []\n Set J 0\n While (J < COUNT_SIZE) {\n If (J == VAL) {\n Set NEW_COUNT PUSH(NEW_COUNT, OLD_COUNT + 1)\n } Else {\n Set NEW_COUNT PUSH(NEW_COUNT, COUNT[J])\n }\n Set J (J + 1)\n }\n Set COUNT NEW_COUNT\n Set I (I + 1)\n }\n \n // \u{6784}\u{5efa}\u{6392}\u{5e8f}\u{540e}\u{7684}\u{6570}\u{7ec4}\n Set RESULT []\n Set I 0\n While (I < COUNT_SIZE) {\n Set J 0\n While (J < COUNT[I]) {\n Set RESULT PUSH(RESULT, I)\n Set J (J + 1)\n }\n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// ==================== \u{68c0}\u{67e5}\u{6570}\u{7ec4}\u{662f}\u{5426}\u{5df2}\u{6392}\u{5e8f} ====================\n\n// \u{68c0}\u{67e5}\u{6570}\u{7ec4}\u{662f}\u{5426}\u{5347}\u{5e8f}\u{6392}\u{5217}\nFunc IS_SORTED_ASC(ARR) {\n Set LEN_ LEN(ARR)\n If (LEN_ <= 1) {\n Return True\n }\n \n Set I 1\n While (I < LEN_) {\n If (ARR[I] < ARR[I - 1]) {\n Return False\n }\n Set I (I + 1)\n }\n \n Return True\n}\n\n// \u{68c0}\u{67e5}\u{6570}\u{7ec4}\u{662f}\u{5426}\u{964d}\u{5e8f}\u{6392}\u{5217}\nFunc IS_SORTED_DESC(ARR) {\n Set LEN_ LEN(ARR)\n If (LEN_ <= 1) {\n Return True\n }\n \n Set I 1\n While (I < LEN_) {\n If (ARR[I] > ARR[I - 1]) {\n Return False\n }\n Set I (I + 1)\n }\n \n Return True\n}\n\n// ==================== \u{901a}\u{7528}\u{6392}\u{5e8f}\u{63a5}\u{53e3} ====================\n\n// \u{901a}\u{7528}\u{6392}\u{5e8f}\u{51fd}\u{6570}\u{ff0c}\u{9ed8}\u{8ba4}\u{4f7f}\u{7528}\u{5feb}\u{901f}\u{6392}\u{5e8f}\u{ff08}\u{5347}\u{5e8f}\u{ff09}\nFunc SORT(ARR) {\n Return QUICK_SORT(ARR)\n}\n\n// \u{901a}\u{7528}\u{6392}\u{5e8f}\u{51fd}\u{6570}\u{ff08}\u{964d}\u{5e8f}\u{ff09}\nFunc SORT_DESC(ARR) {\n Return QUICK_SORT_DESC(ARR)\n}\n";Expand description
排序算法