zoukankan      html  css  js  c++  java
  • 希尔排序

    在这里插入图片描述

    flag = 0 说明对各子序列排序时都无元素交换的动作
    flag = 1 说明对各子序列排序时元素交换的动作

    #include <stdio.h>
    #include <string.h>
    void SHELL_SORT(int key[],int n){
    	int gap = n;
    	while(gap>1){
    		gap = gap/2;
    		int flag = 0; 
    		do 
    		{
    			flag = 0;
    			for (int i=0;i<=n-gap;i++)
    			{
    				int j=i+gap;
    				if (key[i]>key[j])
    				{
    					int temp = key[i];
    					key[i] = key[j];
    					key[j] = temp;
    					flag = 1;
    				}
    			}
    		} while (flag!=1);
    	}
    
    	for (int i=0;i<n;i++)
    	{
    		if (i==n-1)
    		{
    		printf("%d
    ",key[i]);
    		}else{
    		printf("%d ",key[i]);
    		}
    		
    	}
    }
    int main(){
    /*	printf("请输入n的数值
    ");
    	int n;
    	scanf("%d",&n);
    	int a[100];
    	for (int i=0;i<n;i++)
    	{
    		scanf("")
    	}*/
    	int a[] = {49,38,65,97,76,13,27,49};
    	int n = (sizeof(a))/sizeof(int); //求数组的长度
    	SHELL_SORT(a,n);
    
    	return 0;
    }
    

    分析:最外层while循环为log2n数量级,中间层do-while循环为n数量级,谢尔排序的时间复杂度在==O(nlog2n)O(n2)==之间,有人做过测试,谢尔排序的时间复杂度稍大于O(nlog2n),接近于O(n1.23)。

  • 相关阅读:
    mock.js
    v-bind和v-model的区别
    if语句中的return
    js中全局变量和局部变量以及变量声明提升
    js中全局和局部变量的区别
    相对路径、绝对路径
    commonJs
    B/S与C/S
    background-origin
    DOM
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/11781680.html
Copyright © 2011-2022 走看看