数据结构 希尔排序 c Swift 版本

个人对希尔排序的理解
  • 是将待排序 分成若干的子系列排序(是由相隔的个参数,分割而成)。
  • 每次 排序子序列(相隔的参数减少一半)
  • 最终 会对全体元素进行一次直接插入排序, 因为在 (元素大部分有序的情况下,直接插入排序效率很高),所以希尔排序时间效率就快
算法 时间复杂度 与 自己想法
  • 由于 希尔排序 基于 插入排序的一种算法,当相隔的参数为1,过程就为插入排序。
  • 所以 希尔排序 优化点可以根据 实际的情况 和 待排序的元素有序程度。 来单独设计 相隔的参数
  • 在 待排序列 有序的情况下 速度很快, 当然在最差的情况下 也比 直接插入排序快。
  • 希尔排序的时间复杂度是:O(n^1.2)
  • 算法 不稳定
        #include <stdio.h>

        void shellsort(int a[], int n)
        {
            int j, gap;
            
            for (gap = n / 2; gap > 0; gap /= 2) //空开几个
                for(j = gap; j < n; j++) //扫一遍
                    if (a[j] < a[j-gap])  //比较 俩
                    {
                        int temp = a[j];
                        int k = j - gap;
                        
                        while (k >= 0 && a[k] > temp) ///让最小的 移动到最前面
                        {
                            a[k + gap] = a[k];
                            k -= gap;
                        }
                        ///最小的复制过来
                        a[k + gap] = temp;
                    }
        }

        int main(){
           
            int a[10] = {2,5,6,7,8,9,0,1,3,4};
            
            shellsort(a, 10);
            
            int i ;
            
            for (i = 0; i < 10; i++) {
                
                printf("%d",a[i]);
                
            }
            printf("\n");

            return 0;
        }
  • swift

          import UIKit
    
          func shellsort(inout a : [Int]){
              
              let n = a.count-1
              
              for(var gap = n / 2; gap > 0; gap /= 2){
                  for j in gap...n {
                      if a[j] < a[j-gap]{
                          let tmep = a[j]
                          var k = j - gap
                          while k >= 0 && a[k] > tmep {//扫一遍 好填最小值
                              a[k + gap] = a[k]
                              k -= gap
                          }
                          a[k + gap] = tmep
                      }
                  }
              }
              
          }
    
          var a = [2,5,6,7,8,9,0,1,3,4]
    
          shellsort(&a)
    
  • 看我那么可爱n(≧▽≦)n
  • 关注我的微薄 (梁同桌):http://weibo.com/tongrenyinsheng

  • 个人博客: http://www.liangtongzhuo.com

  • ios 个人写的app (同人音声)ASMR音乐

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 某次二面时,面试官问起Js排序问题,吾绞尽脑汁回答了几种,深感算法有很大的问题,所以总计一下! 排序算法说明 (1...
    流浪的先知阅读 4,922评论 0 4
  • 总结一下常见的排序算法。 排序分内排序和外排序。内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序...
    jiangliang阅读 5,259评论 0 1
  • 前言 八大排序,三大查找是《数据结构》当中非常基础的知识点,在这里为了复习顺带总结了一下常见的八种排序算法。常见的...
    LeeLom阅读 98,244评论 41 662
  • 通常一个月亮运行周期需要29.5天,也就是说如果我们想看月亮从新月变化到满月再回到新月需要一整个月天天晚上盯着月亮...
    去皮儿阅读 3,783评论 0 0
  • 今日,踏上新的旅途,这一刻,我选择为一个人,爱一座城! 因为你,我坚定自己的步伐, 因为你,我决定付出一切!
    与你仗剑天涯阅读 1,270评论 0 0

友情链接更多精彩内容