标签:version range for 希尔排序算法 img 算法 time shel 代码
一、C程序实现
/*******************************************************
* Description: 希尔排序算法
* Author: shujuxiong
* Version: 1.0
* Time: 2018-06-24
*******************************************************/
#include <stdio.h>
//函数:打印数组
void PrintDataArray(int a[], int n)
{
for(int i=0; i<n; i++)
printf("%d ",a[i]);
printf("\n");
}
//希尔排序,版本1
void ShellSort1(int a[], int n)
{
//分组
for(int h = n/2; h >= 1; h/=2)
{
//直接插入排序
for(int i = h; i < n; i++)
{
for(int j = i-h; j >= 0 && a[j] > a[j+h];j-=h)
{
int tmp = a[j+h];
a[j+h] = a[j];
a[j] = tmp;
}
}
}
PrintDataArray(a, n);
}
//希尔排序,版本2
void ShellSort2(int a[], int n)
{
int h = 1;
while(h < n/3)
h = 3*h + 1;
while(h >= 1)
{
for(int i = h; i<n; i++)
{
for(int j = i-h; j>=0 && a[j]>a[j+h]; j-=h)
{
int tmp = a[j+h];
a[j+h] = a[j];
a[j] = tmp;
}
}
h = h/3;
}
PrintDataArray(a, n);
}
//测试用例
int main()
{
int a[] = {3,1,7,5,2,4,9,6};
int len = sizeof(a)/sizeof(a[0]);
ShellSort1(a, len);
ShellSort2(a, len);
return 0;
}
运行结果:

二、Java程序实现
/**
* @description: 希尔排序算法
* @author: shujuxiong
* @version: 1.0
* @date: 2018-06-24
*/
public class ShellSort {
public static void sort(int[] a)
{
int N = a.length;
int h = 1;
while(h < N/3)
h = 3*h + 1;
while(h >= 1)
{
for(int i = h; i<N; i++)
{
for(int j = i-h; j>=0 && a[j]>a[j+h]; j-=h)
{
int tmp = a[j+h];
a[j+h] = a[j];
a[j] = tmp;
}
}
h = h/3;
}
}
//方法:打印数组
private static void printDataArray(int[] a)
{
int N = a.length;
for(int i = 0; i < N; i++)
System.out.printf("%d ",a[i]);
System.out.printf("\n");
}
//测试用例
public static void main(String[] args)
{
int[] arr = {3,1,7,5,2,4,9,6};
sort(arr);
printDataArray(arr);
}
}
运行结果:

三、Python 代码实现
# -*- coding: utf-8 -*-
"""
Description: 希尔排序算法
Author: shujuxiong
Version: 1.0
Date: 2018-06-24
"""
import copy
##希尔排序
def shellSort(relist):
N = len(relist)
h = 1
while (h < N/3):
h = int(3*h + 1)
while (h>=1):
for i in range(h, N):
j = i-h
while j>=0 and relist[j+h]<relist[j]:
tmp =relist[j+h]
relist[j+h] = relist[j]
relist[j] = tmp
j-=h
h = int(h/3)
return relist
##测试用例
def main():
mylist = [3,1,7,5,2,4,9,6]
print(shellSort(copy.copy(mylist)))
if __name__==‘__main__‘:
main()
运行结果:

标签:version range for 希尔排序算法 img 算法 time shel 代码
原文地址:https://www.cnblogs.com/shujuxiong/p/9221074.html