v8
This commit is contained in:
21
lib/v9/pages/sort/functions/shell.dart
Normal file
21
lib/v9/pages/sort/functions/shell.dart
Normal file
@@ -0,0 +1,21 @@
|
||||
import '../functions.dart';
|
||||
|
||||
///希尔排序
|
||||
Future<void> shellSort(List<int> src, SortCallback callback) async{
|
||||
//定义变量 gap 并初始化为数组长度的一半。每次循环完成后将 gap 减半直到等于 0。
|
||||
for (int gap = src.length ~/ 2; gap > 0; gap ~/= 2) {
|
||||
//遍历每个子序列并进行插入排序。初始时从第一个子序列的第二个元素开始,即 i = gap,以 gap 为步长逐个遍历每个子序列。
|
||||
for (int i = gap; i < src.length; i += 1) {
|
||||
//将当前遍历到的元素赋值给它
|
||||
int temp = src[i];
|
||||
//内部使用一个 for 循环来实现插入排序。
|
||||
//循环开始时定义变量 j 并将其初始化为当前遍历到的元素的下标。通过不断比较前后相隔 gap 的元素大小并交换位置,将当前元素插入到正确的位置。
|
||||
int j;
|
||||
for (j = i; j >= gap && src[j - gap] > temp; j -= gap) {
|
||||
src[j] = src[j - gap];
|
||||
}
|
||||
src[j] = temp;
|
||||
await callback(src);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user