排序算法1——插入排序,希尔排序

插入排序:

#include <iostream>
using namespace std;
void insert(int *arry,  int lo, int current)
{
    while (lo >= 0 && arry[lo] < current)
    {
        arry[lo + 1] = arry[lo];
        lo--;
    }
    arry[lo + 1] = current;
}
void print(int *arry, int size)
{
    for (int i = 0; i < size; i++)
        cout << arry[i];
    cout << endl;
}
void main()
{
    int arry[5] = { 3, 4, 1, 2, 5 };
    print(arry, 5);
    for (int i = 1; i < 5; i++)
        insert(arry, i-1, arry[i]);
    print(arry, 5);
    system("pause");
}

希尔排序:

#include <iostream>
using namespace std;
void shellsort(int *arry, int size)
{
    for (int gap = 3; gap > 0;gap--)
    for (int i = 0; i < gap; i++)
    {
        for (int j = i + gap; j < size; j = j + gap)
        {
            if (arry[j] < arry[j - gap])
            {
                int temp = arry[j];
                arry[j] = arry[j - gap];
                arry[j - gap] = temp;
                for (int k = j - gap; k >= 0; k = k - gap)
                {
                    if (arry[k] < arry[k - gap])
                    {
                        int temp2 = arry[k];
                        arry[k] = arry[k - gap];
                        arry[k - gap] = temp2;
                    }
                }
            }
        }
    }
}
void print(int *arry, int size)
{
    for (int i = 0; i < size; i++)
        cout << arry[i];
    cout << endl;
}
void main()
{
    int arry[6] = { 2, 5, 1, 3, 4, 6 };
    print(arry, 6);
    shellsort(arry, 6);
    print(arry, 6);
    system("pause");
}
时间: 2024-10-12 23:36:23

排序算法1——插入排序,希尔排序的相关文章

排序算法总结之希尔排序

一,希尔排序算法介绍 ①希尔排序又称缩小增量排序 ,它本质上是一个插入排序算法.为什么呢? 因为,对于插入排序而言,插入排序是将当前待排序的元素与前面所有的元素比较,而希尔排序是将当前元素与前面增量位置上的元素进行比较,然后,再将该元素插入到合适位置.当一趟希尔排序完成后,处于增量位置上的元素是有序的. ②希尔排序算法的效率依赖于增量的选取 假设增量序列为 h(1),h(2).....h(k),其中h(1)必须为1,且h(1)<h(2)<...h(k) . 第一趟排序时在增量为h(k)的各个元

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

#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

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

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

排序算法(二)之希尔排序

希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一.本文会以图解的方式详细介绍希尔排序的基本思想及其代码实现. 基本思想 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止. 简单插入排序很循规蹈矩,不管数组分布是怎么样的,依然

排序算法之 Java希尔排序算法

package net.qh.test.sort; import java.util.ArrayList; import java.util.Calendar; import java.util.List; /** * Created by Administrator on 2016/03/01. */ public class Shell { public int[] sort(int[] arr){ if ( arr == null || arr.length <= 1 ){ return

八大排序算法之二希尔排序(Shell`s Sort)

希尔排序是1959 年由D.L.Shell 提出来的,相对直接排序有较大的改进.希尔排序又叫缩小增量排序 基本思想: 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序. 操作方法: 选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1: 按增量序列个数k,对序列进行k 趟排序: 每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序.仅增量因子为1 时,整个序列

图解排序算法(二)之希尔排序

希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一.本文会以图解的方式详细介绍希尔排序的基本思想及其代码实现. 基本思想 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止. 简单插入排序很循规蹈矩,不管数组分布是怎么样的,依然

排序算法入门之希尔排序(java实现)

希尔排序是对插入排序的改进.插入排序是前面元素已经有序了,移动元素是一个一个一次往后移动,当插入的元素比前面排好序的所有元素都小时,则需要将前面所有元素都往后移动.希尔排序有了自己的增量,可以理解为插入排序的增量为1,希尔排序增量是gap.代码就是在插入排序代码的基础上多了一层增量变化的循环.可以参考http://www.cnblogs.com/chengxiao/p/6104371.html,博主作了详尽介绍. public static void shellSort(int[] a){ in

排序算法学习之希尔排序

直接插入排序对待排数量较少且基本有序的序列,其执行效率是非常高的,希尔排序正是利用了这点,将一个无序的序列拆分成几个子组,然后对几个子组分别进行插入排序. 注意,这儿的分组并不是简单的{a1,a2,a3,b1,b2,b3,c1,c2,c3}(相同字母为一组),而是进行{a1,b1,c1,a2,b2,c2,a3,b3,c3},因为我们一次分组排序的目的是将各个子组中较小的放到整个序列前面,较大的放到整个序列后面,以形成基本有序,然后减少分组数量{a1,b1,a2,b2,a3,b3,a4,b4,a5

算法_基本排序算法之冒泡排序,选择排序,插入排序和希尔排序

排序的元素实现了Comparable接口,以达到对于通用性. 最基础的排序是冒泡排序,下面是其思路: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所有的元素重复以上的步骤,除了最后一个. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. 下面是其实现代码: public class Maopao { public void sort(Comparable[]