二路插入排序

#include<iostream>
using namespace std;
typedef int SqList[8];
void Binpath_Insertsort(SqList &L,int count)
{
        int length = count - 1;
    int L1[length] = { 0 };
    L1[0] = L[1];//L中的第一个记录为L1中排好序的记录
    int first = 0, last = 0;
    for (int i = 2; i <= length; ++i)//依次将L的第2个至最后一个记录插入L1中
    {
        if (L[i] < L1[first])//待插入记录小于L1中最小值,插入到L1[first]之前
        {
            first = (first - 1 + length) % length;
            L1[first] = L[i];
        }
        else if (L[i] > L1[last])//待插入记录大于L1中最小值,插入到L1[last]之后
        {
            last = last + 1;
            L1[last] = L[i];
        }
        else
        {
            int j = last++;
            while (L[i] <L1[j])
            {
                L1[(j + 1) % length] = L1[j];
                j = (j - 1 + length) % length;
            }
            L1[j + 1] = L[i];
        }
    }
    for (int i = 1; i <= length; i++)//  把顺序表L1中的元素依次赋值给L对应位置的元素
    {
        L[i] = L1[(i + first - 1) % length];
    }    

}
void main()
{
  SqList a= { 0, 24, 38, 50, 94, 64, 13, 25 };
  Binpath_Insertsort(a,8);
  for (int i = 0; i <= 8; ++i)
    {
        cout << a[i] << " ";
    }
    cout << endl;
}  

时间: 2024-10-17 18:45:32

二路插入排序的相关文章

【插入排序】直接,折半,二路,希尔

插入排序 给出一下四种方法: 直接插入排序,折半插入排序,二路插入排序,希尔插入排序 代码实现: #include<iostream> using namespace std; #define size 21 typedef int Sqlist[size]; void SInsertSort(Sqlist &L, int n) //直接插入 { cout << "直接插入排序" << endl; for (int i = 2; i <

排序——了解总体以及插入排序

排序在所有数据结构中我认为实际使用频率最大之一,并且看似简单,好像都会用,但实际上在合适地方使用合适的排序方式并不简单,并且是其他很多解决问题模型的基础:最近工作过程中实现一个消息总线,过程要解决消息分发时搜索消息效率问题,发现以前学习的数据结构大都已经还回去了,于是抽空好好再学习一下,并且总结出来供后续偶尔再回顾以及改善其中的理解: 排序整体而言分为:内部排序和外部排序:内部排序是指排序过程使用的空间都是内存空间:而外部排序是指由于排序元素太多,排序过程使用的空间只有一部分使用内存空间,其余使

看数据结构写代码(62) 插入排序

// InsertSort.cpp : 定义控制台应用程序的入口点. //插值排序 #include "stdafx.h" #include <cstdlib> static int testArray[] = {0,55,33,22,99,77,66,11,44,88,9};//11个 //数组0号位置 作为 哨兵... //升序排序 void insertSort(int * array,int num){ for (int i = 2; i <= num; i+

C# 十大排序算法

using System; using System.Collections.Generic; using System.Text; namespace 排序汇总 { class Program { //********************主函数***************** static void Main(string[] args) { Console.WriteLine("请输入待排序列个数n"); int n = int.Parse(Console.ReadLine(

排序sort (一)

这两天学习排序,简单的记录下,等看完之后再进行总结. 1.首先看了交换排序,顾名思义,也就是当无序时进行元素交换,从而达到元素有序. [1]初级的是冒泡排序,冒泡排序的思想是:两两相邻的数据元素进行比较,如果反序则交换,直到有序为止,同时每一次比较之后较小(大)的数上浮,较大(小)的数下沉,因此命名为冒泡排序.因为是两两相邻的数进行比较,且相等时不进行交换,所以是一种稳定的排序算法. 冒泡排序(Bubble Sort)代码实现为: void bubblesort(vector<int>&

数据结构复习之内部排序算法总结

1.三种选择排序(简单选择排序,树形选择排序,堆排序) #include<iostream> #include<cstring> #include<string> #include<queue> #include<map> #include<cstdlib> #include<cstdio> const int INF=0X3f3f3f3f; using namespace std; typedef struct { in

各种基本算法实现小结(五)—— 排序算法

各种基本算法实现小结(五)-- 排序算法 (均已测试通过) * 选择排序 |____简单选择排序 |____堆排序 |____归并排序 * 交换排序 |____冒泡排序 |____快速排序 * 插入排序 |____直接插入排序 |____折半排序 |____希尔排序 * 分配排序 |____箱排序 |____基数排序 ====================================================================== 简单排序算法 1. 冒泡排序 测试环境

C++插入排序之二路插入(环与非环的比较)

#include <iostream> using namespace std; void Grial(int a[],int n) { int i,j; i=j=0; int b[n]; b[0]=a[i]; int k; for(k=1;k<n;k++) { if(b[i]<a[k]) { b[i+1]=a[k]; i++; } else if(b[j]>a[k]) { b[(j-1+n)%n]=a[k]; j=(j-1+n)%n; } else { i++; int m

算法 排序lowB三人组 冒泡排序 选择排序 插入排序

参考博客:基于python的七种经典排序算法   [经典排序算法][集锦]     经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. 排序的稳定性: 经过某种排序后,如果两个记录序号同等,且两者在原无序记录中的先后秩序依然保持不变,则称所使用的排序方法是稳定的,反之是不稳定