IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 心得体会day43-44(日撸 Java 三百行) -> 正文阅读

[数据结构与算法]心得体会day43-44(日撸 Java 三百行)

文章链接:日撸 Java 三百行(总述)_minfanphd的博客-CSDN博客

day43 插入排序?

43.1插入排序

插入排序基本思想:把一个待排序的数据插入到已经排序好的序列中。

day44 希尔排序

44.1 基本思路

他的基本思想是:将待排序的序列分为若干子序列,分别对每个子序列进行插入排序,在整个序列基本有序时,又进行一次整体的排序。最后一次排序一定是步长d=1.取步长d=1进行排序就和插入排序一样了,但是待排序得数是基本有序的。(如下图模拟的希尔排序)

44.2 插入排序和希尔排序对比

通过代码对比,插入排序:数据插入已经排好的序列,需要找到合适的插入位置,并移动数据,最后再插入数据。而希尔排序代码实现和插入排序实现很相似,插入排序只需要进行一次排序就好,而希尔排序要进行多次插入排序,而每一次排序有多个分组需要分别进行插入排序。

在希尔排序中,有四次循环,最外的循环是循环要进行几趟排序,第二个循环是在这一趟排序中,有多少组子序列需要排序,在里面的双层循环就和插入排序一样了,找到合适的位置移动数据,再插入数据。在排序过程中,由于变量太多,所以数组位置的赋值很容易乱,需要理清思路,我在这个过程中就出错了。

插入排序代码:

    /**
     * Insertion sort. data[0] does not store a valid data.
     * data[0].key should be smaller than any valid key.
     */
    public void insertionSort() {
        DataNode tempNode;
        int j = 0;
        for (int i = 2; i < length; i++) {
            tempNode = data[i];

            //find and remove
            for (j = i-1; data[j].key > tempNode.key; j--) {
                data[j+1] = data[j];
            }

            //insert
            data[j+1] = tempNode;

            System.out.println("Round" + (i - 1));
            System.out.println(this);
        }
    }

希尔排序:

    public void shellSort() {
        DataNode tempNode;
        int[] tempJumpArray = { 5, 3, 1};
        int tempJump;
        int p;
        //以步长tempJumpArray[i] 划分若干个子序列
        for (int i = 0; i < tempJumpArray.length; i++) {
            tempJump = tempJumpArray[i];
            //对每一个子序列进行插入排序
            for (int j = 0; j < tempJump; j++) {
                //排序和插入排序一样 只是步长不为1了
                for (int k = j + tempJump; k < length; k += tempJump) {
                    tempNode = data[k];

                    for (p = k - tempJump; p >= 0; p -= tempJump) {
                        if (data[p].key > tempNode.key) {
                            data[p + tempJump] = data[p];
                        }else {
                            break;
                        }
                    }

                    //insert
                    data[p+tempJump] = tempNode;
                }
            }
            System.out.println("Round " + i);
            System.out.println(this);
        }
    }

运行结果:

-------shellSortTest-------
I am a data array with 10 items.
(5, if)  (3, then)  (6, else)  (10, switch)  (7, case)  (1, for)  (9, while)  (12, throw)  (8, until)  (4, do)  
Round 0
I am a data array with 10 items.
(1, for)  (3, then)  (6, else)  (8, until)  (4, do)  (5, if)  (9, while)  (12, throw)  (10, switch)  (7, case)  
Round 1
I am a data array with 10 items.
(1, for)  (3, then)  (5, if)  (7, case)  (4, do)  (6, else)  (8, until)  (12, throw)  (10, switch)  (9, while)  
Round 2
I am a data array with 10 items.
(1, for)  (3, then)  (4, do)  (5, if)  (6, else)  (7, case)  (8, until)  (9, while)  (10, switch)  (12, throw)  
Result
I am a data array with 10 items.
(1, for)  (3, then)  (4, do)  (5, if)  (6, else)  (7, case)  (8, until)  (9, while)  (10, switch)  (12, throw)  

?总结:

今天学习了插入排序和希尔排序,明明希尔排序的循环都变多了,为啥它的平均时间复杂度还要比插入排序时间复杂度好呢,我觉得是希尔排序主要是它每次就是再一小范围内移动插入数据,再最后一次整体的进行插入排序时数列基本有序,但如果数据量大了,感觉希尔排序好像也没有很大的优势。另外,我认为学习希尔排序要结合插入排序学习,可能理解更容易。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:43:30  更:2022-03-16 22:43:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:46:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码