希尔排序---shellsort

#include <iostream>
using namespace std;
void shellSort(int a[], int n)
{
	int i, j, gap;
	for(gap = n/2; gap > 0; gap /= 2)//间隔,逐次递减一半
	{
		for(i = 0; i < gap; i++)//从49到76,逐步递增,也就是分组数。每次循环对一组数完成排序
		{
			for(j = i + gap; j < n; j += gap)//对这个一组内的,间隔为gap,完成插入排序
			{
				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] = {49, 38, 65, 97, 76, 13, 27, 49, 55, 04};
	shellSort(a, 10);
	for(int i =0; i < 10; i++)
	{
		cout<<a[i]<< " ";
	}
	cout<<endl;
}
时间: 2024-07-31 14:30:16

希尔排序---shellsort的相关文章

&lt;排序算法&gt; 希尔排序ShellSort

1.核心思想:希尔排序是插入排序的一种,是直接插入排序的一种改进版本,他们同属于插入排序类.这是一个不稳定的排序算法.采取跳跃分割的策略:将相距某个“增量”的记录组成一个子序列,这样才能保证在子序列内分别进行直接插入排序后得到的结果是基本有序而不是局部有序.2.代码实现: 1 #include<iostream> 2 using namespace std; 3 4 void PrintArr(int arr[],int len); 5 void ShellSort(int arr[],int

【算法】【排序】【插入类】希尔排序 ShellSort

#include<stdio.h> #include <time.h> #include<stdlib.h> int main(){ int a[15]; //设立随机数 srand(time(0)); for(int i=0;i<15;i++){ a[i]=rand()%(30); //随机数范围0到29之间 } //数组a的大小 int size=sizeof(a)/4; //打印数组信息 for(int i=0;i<size;i++){ printf(

Java排序算法(四):希尔排序

[基本思想] 将原本有大量记录数的记录进行分组,分割成若干个子序列,此时每个子序列待排序的记录个数就比较少了,然后在这些子序列内分别进行直接插入排序,当整个序列都基本有序时,再对全体记录进行一次直接插入排序. 所谓的基本有序,就是小的关键字基本在前面,大的基本在后面,不大不小的基本在中间,像{2, 1, 3, 6, 4, 7, 5, 8, 9}这样可以称为基本有序了. [java实现] public class ShellSort { public static void main(String

深入浅出排序算法之-希尔排序

#include <stdio.h> /* 希尔排序 基本思想:希尔排序又称为缩小增量排序,对简单插入排序的优化.(外部分组gap,组内部插入排序!!) 特点:一种不稳定的排序 */ void ShellSort(int array[],int len){ int i,j; int gap; // gap int temp; for (gap = len/2 ; gap > 0 ; gap = gap/2){  // 核心就是 array[j+gap] 与 array[j]比较,直到ga

快排,冒泡排,选择排序,希尔排序

package cn.hncu.dataStruct; public class SortMethods { /* 算法好坏的评价指标(一般只在n值非常大的时候才会考虑,如n取10万): * 1.时间复杂度: 通俗点,就是指程序运行的快慢(时间)---通常用计算机的运算(算术,赋值)次数来代替 * 2.空间复杂度: 占用内存空间的大小---通常用程序中使用了多少变量(栈内存.堆内存),这些变量总共占了多少内存 */ public static void main(String[] args) {

13. 蛤蟆的数据结构进阶十三排序实现之希尔排序法

13. 蛤蟆的数据结构进阶十三排序实现之希尔排序法 本篇名言:"一个人光溜溜的到这个世界来 ,最后光溜溜的离开这个世界而去 , 彻底想起来 , 名利都是身外物 ,只有尽一人的心力 , 使社会上的人多得他工作的裨益 ,是人生最愉快的事情.--邹韬奋" 下面是希尔排序法了. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47706135 1.  希尔排序 希尔排序(ShellSort)是插入排序的一种.也称缩小增量排序

排序--ShellSort 希尔排序

希尔排序 no 实现 希尔排序其实就是插入排序.只不过希尔排序在比较的元素的间隔不是1. 我们知道插入排序 都是 一个一个和之前的元素比较.发现比之前元素小就交换位置.但是希尔排序可能是和前第n个元素比较,如果发现比前第n个元素小就和前第n个元素交换位置.具体看下图 第一趟比较.n是为5.也就是说每个数和前面第5个数比较.如果发现小于前面第5个数的话.交换位置. 所以我们看到 72 比 592 小. 所以交换位置. 283 比 348 小.继续交换 第二趟比较. n 是2.同理 最后一次比较.n

ShellSort 希尔排序

# ShellSort希尔排序_Python实现 def shell_sort(li): n = len(li) # gap间隔为长度除2 gap = n // 2 while gap > 0: for i in range(gap, n): while i >= gap and li[i - gap] > li[i]: li[i], li[i - gap] = li[i - gap], li[i] i -= gap gap //= 2 return li list = [1, 55,

奔走在算法的大路上(一)排序之希尔排序

希尔排序是插入排序的一种更高效的改进版本.它的作法不是每次一个元素挨一个元素的比较.而是初期选用大跨步(增量较大)间隔比较,使记录跳跃式接近它的排序位置:然后增量缩小:最后增量为 1 ,这样记录移动次数大大减少,提高了排序效率.希尔排序对增量序列的选择没有严格规定. 希尔排序最关键的是选对增量,关于增量的选择,建议参考:http://zh.wikipedia.org/wiki/希尔排序  中的步长序列. 希尔排序的核心思想是:由一定规则将带排序的长序列切割成多个子序列,子序列进行内部插入排序,如