BInsertSort

#include<stdio.h>
#include<algorithm>
using namespace std;
int a[10000]={-1,4,5,2,1,3,7};
int n=5;
void Is(){
    for(int i=2;i<=n;i++){
        if(a[i]<a[i-1]){
            a[0]=a[i];
            int l=1,h=i-1;
            while(l <= h){
                int m = (l+h)/2;
                if(a[0]<a[m]) h=m-1;
                else l=m+1;
            }
            a[i]=a[i-1];
            int j=0;
            for( j=i-1;j>=h+1;j--)
                a[j+1]=a[j];
            a[h+1]=a[0];
        }
    }
}
int main()
{

    Is();
    for(int i=1;i<=5;i++) printf("%d ",a[i]);
    return 0;
}

时间: 2024-11-05 04:18:16

BInsertSort的相关文章

各种排序算法的实现代码

#include"stdio.h" #include"malloc.h" #include"stdlib.h" typedef int KeyType; #define MAXSIZE 20 typedef struct { KeyType key; }RedType; typedef struct { RedType r[MAXSIZE+1]; int length; }SqList,* SQLIST; void play_choose(voi

常见排序的JAVA实现

还有好多其他排序而且每种排序都有优化,之后会不断添加. /** * 文件名:SortTest.java * 时间:2014年11月5日下午6:05:13 * 作者:修维康 */ package chapter7; import java.util.Arrays; /** * 类名:SortTest 说明:各类排序分析详解 */ public class SortTest { /** * 方法名:insertionSort 说明:插入排序 时间复杂度O(N^2) */ public static

内部排序(3)——插入排序之折半插入排序

因为插入排序的基本思想是在一个有序序列中插入一个新的记录,则能够利用"折半查找"查询插入位置,由此得到的插入排序算法为"折半插入排序".算法例如以下: void BInsertSort () { // 对顺序表L作折半插入排序 for ( i=2; i<length; ++i ) { <span style="white-space:pre"> </span>r[0] = r[i]; // 将r[i]暂存到r[0]

C++ 排序

#include<iostream>using namespace std;#include<ctime>#include<cstdlib>typedef int KeyType;typedef char * InfoType;typedef struct{    KeyType key;    InfoType otherinfo;}ElemType;typedef struct{    ElemType *R;    int length;}SqList; int

9种排序

一:你必须知道的 1> JS原型 2> 排序中的有序区和无序区 3> 二叉树的基本知识 如果你不知道上面三个东西,还是去复习一下吧,否则,看下面的东西有点吃力. 二:封装丑陋的原型方法 Function.prototype.method = function(name, func){ this.prototype[name] = func; return this; }; 在下面的排序中都要用到这个方法. 三:9种排序算法的思路和实现 1> 插入排序 基本思路: 从无序区的第一个元

(3)--折半插入排序

1.先找出要插入点的位置 2.在移动位置 1 #include <iostream> 2 using namespace std; 3 void BInsertSort(int *arr,int length) 4 { 5 for (int i = 1; i <= length - 1;i++) {//从第一个元素开始插入 6 int low = 0; int high = i-1; int key = arr[i]; 7 if (arr[i]<arr[i-1]) {//如果arr

各种排序

数据结构排序算法总结 这章的内容比较经典,都是一些很好的算法,将来很可能会用得到,总结一下,加深一下印象. 文章篇幅有点大. 一:插入排序       1)直接插入排序2)折半插入排序3)希尔排序 二.交换排序      1)冒泡排序          2)快速排序 三.选择排序      1)简单选择排序      2)堆排序 四.归并排序 五.基数排序 一.插入排序 1)直接插入排序 时间复杂度:平均情况—O(n2)     最坏情况—O(n2)     辅助空间:O(1)      稳定性

常用排序算法小结

1 #include <stdio.h> 2 #include <stdlib.h> 3 4 5 //the basic bubble sort 6 void maopao1(int *num,int len) 7 { 8 int i,j; 9 int temp; 10 for (i = 0; i < len-1; ++i) 11 { 12 for (j = i+1; j<len; ++j) 13 { 14 if (num[i]>num[j]) 15 { 16 t

数据结构之排序 --- 插入排序

1.插入排序-直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表.即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止. 要点:设立哨兵,作为临时存储和判断数组边界之用. 直接插入排序示例: 如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面.所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是