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

希尔排序整理

时间:2023-08-28 22:56:35浏览次数:37  
标签:tmp int start 希尔 整理 array 排序

算法原理

代码实现

 1 public static  void sort(int[] array){
 2         //数据间隔h 8>4>2>1
 3         int h = array.length / 2;
 4         while(h >= 1){
 5             for (int start = 0; start < h; start++) {
 6                 //对 start, start+h ,start+2h, start+nh 插排
 7                 //前后元素是-h和+h
 8                 for (int i = start + h; i < array.length; i += h) {
 9                     int tmp = array[i];
10                     int j;
11                     for (j = i; j - h >= 0 && tmp < array[j - h]; j -= h) {
12                         array[j] = array[j - h];
13                     }
14                     array[j] = tmp;
15                 }
16             }
17             h /= 2;
18         }
19         System.out.println("Arrays.toString(array) = " + Arrays.toString(array));
20     }

 

复杂度

希尔排序理论上时间复杂度是O(n^2),但实际上执行效率能跟O(nlogn)级别的算法媲美,不过当数据量增加时,还是会跟O(nlogn)产生差距。

希尔排序性能高的原因是:希尔排序每一轮排完,会让数据逐渐有序。

 

标签:tmp,int,start,希尔,整理,array,排序
From: https://www.cnblogs.com/jiangym/p/17663615.html

相关文章

  • 数组二分查找:35. 搜索插入位置、34. 在排序数组中查找元素的第一个和最后一个位置
    35. 搜索插入位置1classSolution:2defsearchInsert(self,nums:List[int],target:int)->int:3left,right=0,len(nums)-145whileleft<=right:#左闭右闭6mid=left+(right-left)//27ifnum......
  • 【C++STL基础入门】vector运算和遍历、排序、乱序算法
    @TOC前言C++标准库提供了丰富的容器和算法,其中vector是最常用的容器之一。它以动态数组的形式存储元素,并提供了许多方便的运算符和算法来操作和处理数据。本文将介绍vector的基本运算、遍历方法、排序算法以及乱序算法。通过学习这些内容,您将能够更加灵活、高效地使用vector容器。......
  • 冒泡排序
    冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,比较相邻的元素,并根据需要交换它们的位置,直到整个列表排序完成为止。具体步骤如下:从列表的第一个元素开始,比较它与下一个元素的大小。如果当前元素较大,则交换它与下一个元素的位置。继续向列表的下一个元素进行比较,重复......
  • 插入排序之希尔排序
    1voidshell_sort()2{3unsignedchari=0,j=0,gap;4unsignedchararr[10]={4,1,3,9,6,2,8,5,0,7};5unsignedcharlen=sizeof(arr);6unsignedchartemp;7chark;8gap=len;9while(gap)10{11gap......
  • 插入排序之直接插入排序
    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......
  • DWR util.js 整理(DWR 处理各种form表单Select/option,table等,
    /********************/util.js包含一些有用的函数function,用于在客户端页面调用.主要功能如下:代码$()获得页面参数值addOptionsandremoveAllOptions初始化下拉框addRowsandremoveAllRows填充表格getText取得text属性值getValue取得form表......