首页 > 其他分享 >希尔排序

希尔排序

时间:2023-12-02 15:33:32浏览次数:34  
标签:arr 排序 dk int 希尔 include

#include <stdio.h>
#include <stdlib.h>

void shellSort(int arr[],int n)
{
    int dk,i,j,p;
    for(dk=n/2;dk>=1;dk=dk/2)
    {
        for(i=dk+1;i<n;i++)
        {
            if(arr[i]<arr[i-dk])
            {
                p=arr[i];
                for(j=i-dk;j>0&&p<arr[j];j-=dk)
                    arr[j+dk]=arr[j];
                arr[j+dk]=p;
            }
        }
    }
}

int main()
{
    int arr[13]={2,15,24,6,8,21,5,23,12,16,56,34,18};
    int n=sizeof(arr)/sizeof(arr[0]);
    shellSort(arr,n);
    for (int i = 0; i < n; i++) {
        printf("%d    ",arr[i]);
    }
    return 0;
}

 

标签:arr,排序,dk,int,希尔,include
From: https://www.cnblogs.com/simpleset/p/17871668.html

相关文章

  • 几大排序的稳定性
    ​ 八大排序总结:(1)冒泡排序冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,......
  • 折半插入排序
    ACC==1升序,ACC==-1降序#include<stdio.h>#include<stdlib.h>#include<string.h>typedefstruct{intNO;intAge;charName[50];}Student;typedefstruct{intStudentCount;Student*data;}Sqlist;voidBinsersort(Sql......
  • 直接插入排序
    01234528123      从下标1开始遍历,默认第一个元素是已排序序列。例如对元素3进行插入排序:下标0-3分别是2-5-8-12;此时k=arr[4]=3;j=i-1=3;从后往前遍历找到k应该插入的位置当while循环条件 j>=0&&arr[j]>k 一直成立时,arr[j+1]=ar......
  • SQL-排序和分组
    1.leftjoin(左联接)返回包括左表中的所有记录和右表中联结字段相等的记录rightjoin(右联接)返回包括右表中的所有记录和左表中联结字段相等的记录innerjoin(等值连接)只返回两个表中联结字段相等的行2.当表格为空时,如何返回null值?网上找到一......
  • 排序算法值鸡尾酒排序(java)
    一:概述冒泡排序的每一个元素都可以像小气泡一样,根据自身的大小,一点一点地向着数组的一侧移动。算法的每一轮都是从左到右比较元素,进行单向的位置交换的。鸡尾酒排序做了怎样的优化:鸡尾酒排序的元素比较和交换过程是双向的。二:举例子由9个数字组成的无序数列{2,3,4,5,6,7,1,9......
  • 详解十大经典排序算法(一):冒泡排序
    算法原理冒泡排序通过多次遍历数组,比较相邻元素并交换,逐步将最大值(或最小值)"冒泡"到数组的一端。算法描述冒泡排序是一种简单的排序算法,它重复地遍历待排序的元素,比较相邻的两个元素,并根据需要交换它们的位置,直到整个序列排序完成。冒泡排序的基本思想是通过相邻元素的比较和交换,将......
  • 微信小程序开发的聚合函数排序.aggregate.sort
    //普通查询用.orderBy('add_time','desc'),聚合查询用.sort({ins_time:-1})'usestrict';constdb=uniCloud.database()//对数据库的对象获取;exports.main=async(event,context)=>{ letstart=newDate().getTime(); constcollection=db......
  • 时间复杂度为 O(n^2) 的排序算法
    对于小规模数据,我们可以选用时间复杂度为O(n2)的排序算法。因为时间复杂度并不代表实际代码的执行时间,它省去了低阶、系数和常数,仅代表的增长趋势,所以在小规模数据情况下,O(n2)的排序算法可能会比O(nlogn)的排序算法执行效率高。不过随着数据规模增大,O(nlogn)的排序算法是......
  • 82. 删除排序链表中的重复元素 II
    82.删除排序链表中的重复元素II2021年3月25日​数据量300,数据大小[-200,200]​题意很简单,就考验你指针的使用。​两种方法桶排序暴力法思路很简单,加个100的偏移量,然后全都存下来,再倒着存进链表里返回即可。classSolution{public:ListNode*deleteDuplicates(......
  • 83. 删除排序链表中的重复元素
    83.删除排序链表中的重复元素2021年3月26日删除排序链表中的重复元素II的简化版,while套while就行为了时间,指针都不删除吗?classSolution{public:ListNode*deleteDuplicates(ListNode*head){ListNode*p=head;while(p&&p->next){w......