TZC 1283: 简单排序 —— 希尔排序

我们以TZC 1283为例简单说明一下排序(含十大经典排序算法)的python实现方法和C实现方法。希尔排序原理请参见:https://www.cnblogs.com/chengxiao/p/6104371.html 或 https://www.runoob.com/w3cnote/shell-sort.html

原题链接:1283: 简单排序

python代码如下:

import math


# 希尔排序
def shell_sort(arr):
    gap = 1
    while gap < len(arr) / 3:
        gap = gap * 3 + 1
    while gap > 0:
        for a in range(gap, len(arr)):
            tmp = arr[a]
            b = a - gap
            while b >= 0 and arr[b] > tmp:
                arr[b + gap] = arr[b]
                b -= gap
            arr[b + gap] = tmp
        gap = math.floor(gap / 3)
    return arr


T = int(input())
for i in range(T):
    s = input().split()
    lt = [int(x) for x in s]
    lt1 = lt[::-1]
    lt1.pop()
    n = len(lt1)

    shell_sort(lt1)

    for j in range(n):
        if j != n - 1:
            print(lt1[j], end=' ')
        else:
            print(lt1[j])

 C语言代码如下:

#include <stdio.h>
#include <string.h>
#define N 1010
void shell_sort(int arr[], int len)	//希尔排序 
{
    int gap, i, j;
    int temp;
    for(gap=len/2; gap>0; gap/=2)
        for(i=gap; i<len; i++)
		{
            temp=arr[i];
            for(j=i-gap; j>=0 && arr[j]>temp; j-=gap)
                arr[j+gap]=arr[j];
            arr[j+gap]=temp;
        }
}
int main()
{
	int m,n,i,j,t,a[N]={0};
	scanf("%d",&m);
	while(m--)
	{
		scanf("%d",&n);
		memset(a,0,n);		//初始化数组
		for(i=0;i<=n-1;i++)		//输入
			scanf("%d",&a[i]);
		
		shell_sort(a,n);

		for(i=0;i<=n-1;i++)		//输出 
		{
			if(i!=n-1)
				printf("%d ",a[i]);
			else
				printf("%d\n",a[i]);
		}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值