首页 > 其他分享 >插入排序之希尔排序

插入排序之希尔排序

时间:2023-08-28 16:56:34浏览次数:43  
标签:arr temp 插入排序 unsigned gap char 希尔 排序

 1 void shell_sort()
 2 {
 3     unsigned char i=0,j=0,gap;
 4     unsigned char arr[10] = {4,1,3,9,6,2,8,5,0,7};
 5     unsigned char len = sizeof(arr);
 6     unsigned char temp;
 7     char k;
 8     gap = len;
 9     while(gap)
10     {
11         gap /= 2;
12         /*共gap个数组,对每一组都进行直接插入排序*/
13         for(i = 0; i < gap; i++)
14         {
15             /*如果后值小于前值,则寻找后值位置*/
16             for( j = i+gap; j < len; j += gap)
17             {
18                 if(arr[j] < arr[j - gap])
19                 {
20                     temp = arr[j];
21                     k = j-gap;
22                     while(k >= 0 && arr[k] >temp)
23                     {
24                         arr[k + gap] = arr[k];
25                         k -= gap;
26                     }
27                     arr[k + gap] = temp;
28                 }                
29             }
30         }
31     }
32     
33     for(i=0;i<10;i++)
34     {
35         printf("%d\n",arr[i]);
36     }
37 }

 

标签:arr,temp,插入排序,unsigned,gap,char,希尔,排序
From: https://www.cnblogs.com/njit-sam/p/17645555.html

相关文章

  • 插入排序之直接插入排序
    1voidinsert_sort()2{3inti,j;4unsignedchararray[10]={4,1,3,9,6,2,8,5,0,7};5unsignedcharlen=sizeof(array);67/*遍历所有无序序列*/8for(i=1;i<len;i++)9{10unsignedchartemp=array[i];......
  • 简单排序之选择排序
    1voidselect_sort()2{3inti,j,k;4unsignedchararray[10]={4,1,3,9,6,2,8,5,0,7};5unsignedcharlen=sizeof(array);6unsignedchartemp;78for(i=0;i<len-1;i++)9{10k=i;11/*遍历所以有......
  • 递归排序之快速排序(挖坑法)
    1#include<stdio.h>234unsignedcharstandard(unsignedchar*array,unsignedcharlow,unsignedcharhigh)5{6unsignedcharkey=array[low];7while(low<high)8{9while(low<high&&array[high]&g......
  • 基础排序
    选择排序指针表示法voidchoose_sort(int*arr,intn){  for(inti=0;i<n;i++){    intminIndex=i;    for(intj=i+1;j<n;j++){      if(*(arr+j)<*(arr+minIndex)){        minIndex=......
  • 堆排序
    堆是以二叉树为结构组成的一个序列,一般以数组进行实现,如设N=1为根节点,则左节点2*N,右节点2*N+1,以此构建一整个堆。堆结构体的数据结构typedefintItem;typedefstructmaxHeap{  Item*data; //堆的数组实现  intcount; //实际存在的数据量}maxHea......
  • 【校招VIP】前端算法考察之排序
    考点介绍:不同的场景中,不同的排序算法执行效率不同。稳定:冒泡、插入、归并不稳定:选择、快速、堆排序、希尔排序一、考点题目1、使用js实现数组的快速排序解答:快速排序使用了冒泡+分治的思路。每轮从数组中取出一个数作为基准;在排序过程中,小于或等于基准数的全部放到基准的左......
  • sql根据子表的条数排序
    您可以使用子查询和聚合函数来根据子表的条数排序,以下是一个示例:假设有两张表:orders和order_items,其中orders表包含订单信息,而order_items表包含每个订单的订单项信息。首先,您可以编写一个子查询来计算每个订单的订单项数量,并将其命名为order_item_count:SELECTorder_id,......
  • master公式 归并排序 小和问题 逆序对问题 荷兰国旗问题 快排
    递归行为时间复杂度计算:master公式T(N)=a*T(N/b)+O(Nd)N:母问题规模a:子问题计算次数N/b:子问题规模O(Nd):每次递归除子问题外其他操作时间复杂度1)log(b,a)>d : T(N)=O(Nlog(b,a)) 2)log(b,a)<d : T(N)=O(Nd) 3)log(b,a)==d : T(N)=O(Nd*logN) 使用ma......
  • 剑指Offer 25. 合并两个排序的链表
    题目链接:剑指Offer25.合并两个排序的链表题目描述:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。解法思路:在两链表向后遍历的过程中,哪个更小一点,哪个先放在合并后的链表中。最后哪个链表剩余,直接接在合并链表的后面即可。代码:/***Definit......
  • 【题解】 P7077 [CSP-S2020] 函数调用(拓扑排序)
    题意题目给定了一个长度为\(n\)序列\(a\)与\(m\)个操作,操作一共有3种:1.给定\(x,y\),使\(a_x\)增加\(y\)。2.给定\(x\),使\(a\)中所有数全部乘上\(x\)。3.给出k个数\(c_1,c_2,...,c_k\),表示这个操作的任务是按照先后顺序执行编号为\(c_1,c_2,...,c_k\)的\(k\)的操作。最后,题目相......