山西网站建设网站,网站设计难点,公司建设网站的手续,阿里云服务器管理引言
在一个普通的下午#xff0c;小明和小森决定一起玩“谁是老板”的扑克牌游戏。这次他们玩的可不仅仅是娱乐#xff0c;更是要用扑克牌来决定谁是真正的“大老板”。
然而#xff0c;小明的牌就像刚从乱麻中取出来的那样#xff0c;毫无头绪。小森的牌也像是被小丑掷…引言
在一个普通的下午小明和小森决定一起玩“谁是老板”的扑克牌游戏。这次他们玩的可不仅仅是娱乐更是要用扑克牌来决定谁是真正的“大老板”。
然而小明的牌就像刚从乱麻中取出来的那样毫无头绪。小森的牌也像是被小丑掷出的毫无规律可言。看着手中的牌他们陷入了深深的思考。
就在他们即将放弃的时候小明灵光一现“我们可以使用希尔排序来对扑克牌进行排序”
小森一脸困惑地问“希尔排序那是什么鬼”
小明解释道“希尔排序是一种基于插入排序的算法可以把乱序的数组变得有序。我们可以通过逐渐减少增量序列的方式让扑克牌的局部变得有序。”
听到这个解释小森瞬间兴奋起来“那就让我们开始吧”
他们开始按照希尔排序的原理 对扑克牌进行排序。首先他们把牌按照一定的增量分成几个小堆然后对每个小堆进行插入排序。随着增量的逐渐减少他们不断地对小堆进行插入排序直到增量变为1。在这个过程中他们不断地比较牌的大小进行交换。最后整个序列都变得有序了。
经过一番努力小明和小森终于将扑克牌排好序了。在接下来的“谁是老板”游戏中他们凭借着已经排好序的扑克牌一路高歌猛进最终获得了胜利
小森高兴地说“希尔排序真是太神奇了我们以后可以多使用它来对扑克牌进行排序”
小明也笑着说“是啊而且我们可以把扑克牌当作数字来练习我们的数学能力”
在这个欢声笑语的下午小明和小森不仅学会了使用希尔排序来对扑克牌进行排序还体验到了算法的魅力。他们明白了一个道理只要肯努力总会找到解决问题的方法
希尔排序算法核心思路 希尔排序 先将待排序序列按照一定的间隔分成若干个子序列对这些子序列进行插入排序。然后缩小间隔再次进行插入排序。不断重复这个过程直到最后的间隔为1此时整个序列已经基本有序了再进行一次插入排序即可完成排序。
希尔排序算法专区
// ShellSort是一个函数接受一个整数数组arr数组的大小size以及一个比较函数comp作为参数
void ShellSort(int arr[], int size, bool (*comp)(const int, const int)) { // 初始化gap为数组长度的一半这是希尔排序的经典起始距离 for (int gap size/2; gap0; gap/2){ // 遍历从gap位置开始到数组末尾的每一个元素 for (int i gap; i size; i){ // 保存当前元素的值 int value arr[i]; // 从当前元素位置开始向前遍历每次移动gap的位置 int j i - gap; // 只要前一个元素大于当前元素满足comp函数的条件就继续向前移动 for (;j0 comp(arr[j],value); j-gap){ // 向前移动gap的位置将前一个元素向后移动 arr[j gap] arr[j]; } // 在正确的位置插入当前元素 arr[j gap] value; } }
}// 定义一个名为GreaterCmp的函数它接受两个const int类型的参数val1和val2返回值为bool类型。当val1大于val2时返回true否则返回false。
bool GreaterCmp(const int val1, const int val2) {return val1 val2;
}// 定义一个名为LessCmp的函数它接受两个const int类型的参数val1和val2返回值为bool类型。当val1小于val2时返回true否则返回false。
bool LessCmp(const int val1, const int val2) {return val1 val2;
}