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 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> C解OJ题--存在重复元素(采用折半插入排序) -> 正文阅读

[数据结构与算法]C解OJ题--存在重复元素(采用折半插入排序)

前言:
??此处先声明一点,本排序专栏的OJ题,不出意外情况都会采用数据结构中的各种经典排序算法,目的是巩固排序算法。所以使用的方法比较复杂的话,不要介意。
??当然排序算法种类比较多,一个OJ题不可能全部实现一遍,因此每个排序的OJ题,会采用其中的一种方法来实现。
??其次各种排序方式在排序专栏中都有详细介绍,所以在这些OJ题中只会初略提及,不会详述。


??插入排序有三类: 直接插入排序,折半插入排序,希尔排序。
??此处采用折半插入排序来解这道OJ题

原题如下:
在这里插入图片描述
??给定一个整数数组,判断是否存在重复元素。
??如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。

简单思路:
??先采用排序手段对该组数据进行排序,排序后再对这组数据进行遍历判断。


折半插入排序思想:
??折半插入排序与直接插入排序的不同点是,直接插入排序边比较边移动位置,而折半插入排序是先采用二分查找找到要插入的位置,之后再进行移动。其相对于直接插入排序减少了比较的次数,从而使效率提高。


代码实现:

bool containsDuplicate(int* nums, int numsSize){
    int i;//用于标记有序组元素下标
    int j;//用于标记无序组元素下标
    int high;//用于标记有序组中的高端地址
    int mid;//用于标记有序组中的中端地址
    int low;//用于标记有序组中的低端地址
    int temp;//临时变量,用于临时存储数据
    for(j=1;j<numsSize;j++)//依次从无序组中取出数据
    {
        temp=nums[j];//将数据进行备份
        high=j-1;//高端地址为无序组第一个数据位置的前一个位置,即有序组的最后一个数据位置
        low=0;//低端地址为有序组的第一个数据位置
        while(low<=high)//如果low>high,则low所标记的位置将是要插入的位置
        {
            mid=(high+low)/2;
            if(temp>nums[mid])//插入位置在中端位置的右边
            {
                low=mid+1;//low指向中端位置的下一个位置
            }
            else//插入位置在中端位置的左边
            {
                high=mid-1;//high指向中端地址的上一个位置
            }
        }
        for(i=j-1;i>=low;i--)//将low所指的当前数据及后面的数据整体移动一个位置
        {
             nums[i+1]=nums[i];
        }
        nums[low]=temp;
    }
    for(i=1;i<numsSize;i++)//进行遍历判断
    {
        if(nums[i-1]==nums[i])return true;//判断是否存在重复元素
    }
    return false;
}

??我是老胡,感谢阅读!! ?? ??

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-04 13:41:41  更:2021-12-04 13:43:41 
 
开发: 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年4日历 -2024/4/18 21:30:36-

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