本文介绍: 经过一番努力,小明小森终于将扑克牌排好序了。在接下来的“谁是老板”游戏中,他们凭借着已经排好序的扑克牌,一路高歌猛进,最终获得了胜利!小森高兴地说:“希尔排序真是太神奇了!我们以后可以使用它来对扑克牌进行排序!小明也笑着说:“是啊,而且我们可以扑克牌当作数字练习我们数学能力!在这个欢声笑语的下午,小明小森不仅学会使用希尔排序来对扑克进行排序,还体验到了算法的魅力。他们明白了一个道理:只要肯努力,总会找到解决问题方法

引言

在一个普通的下午,小明小森决定一起玩“谁是老板”的扑克游戏。这次他们玩的可不仅仅是娱乐,更是要用扑克牌来决定谁是真正的“大老板”。

然而,小明的牌就像刚从乱麻中取出来的那样,毫无头绪。小森的牌也像是被小丑掷出的,毫无规律可言。看着手中的牌,他们陷入了深深的思考

就在他们即将放弃的时候小明灵光一现:“我们可以使用希尔排序来对扑克进行排序!”

小森一脸困惑地问:“希尔排序?那是什么鬼?”

小明解释道:“希尔排序是一种基于插入排序算法可以把乱序的数组变得有序。我们可以通过逐渐减少增量序列方式,让扑克牌的局部变得有序。”

听到这个解释小森瞬间兴奋起来:“那就让我们开始吧!”

他们开始按照希尔排序的原理扑克牌进行排序。首先,他们把牌按照一定的增量分成几个小堆然后每个小堆进行插入排序。随着增量的逐渐减少,他们不断地对小堆进行插入排序,直到增量变为1。在这个过程中,他们不断地比较牌的大小,进行交换最后,整个序列都变得有序了。

经过一番努力,小明和小森终于将扑克牌排好序了。在接下来的“谁是老板”游戏中,他们凭借着已经排好序的扑克牌,一路高歌猛进,最终获得了胜利!

小森高兴地说:“希尔排序真是太神奇了!我们以后可以使用它来对扑克牌进行排序!”

小明也笑着说:“是啊,而且我们可以把扑克牌当作数字练习我们的数学能力!”

这个欢声笑语的下午,小明和小森不仅学会使用希尔排序来对扑克牌进行排序,还体验到了算法的魅力。他们明白了一个道理:只要肯努力,总会找到解决问题方法

希尔排序算法核心思路

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述希尔排序 先将待排序序列按照一定的间隔分成若干个子序列,对这些子序列进行插入排序。然后缩小间隔,再次进行插入排序。不断重复这个过程,直到最后的间隔为1,此时整个序列已经基本有序了,再进行一次插入排序即可完成排序。

希尔排序算法专区

// ShellSort是一个函数,接受一个整数数组arr数组大小size,以及一个比较函数comp作为参数  
void  ShellSort(int arr[], int size, bool (*comp)(const int&, const int&)) {  
  
    // 初始化gap数组长度的一半,这是希尔排序的经典起始距离  
    for (int  gap = size/2; gap>0; gap/=2){  
  
        // 遍历gap位置开始到数组末尾的每一个元素  
        for (int  i = gap; i < size; i++){  
  
            // 保存当前元素的值  
            int value = arr[i];  
  
            // 从当前元素位置开始向前遍历,每次移动gap位置  
            int j = i - gap;  
            // 只要前一个元素大于当前元素满足comp函数条件),就继续向前移动  
            for (;j>=0 &&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;
}



原文地址:https://blog.csdn.net/xiaov_sen/article/details/134808798

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_50170.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注