[数据结构]二分插入排序

简介: 二分插入排序是对二分查找和插入排序的一个结合,插入操作时通过二分查找找到要插入的位置.#include // 打印数组avoid printArr(int a[],int n){ for (int i =...

二分插入排序是对二分查找和插入排序的一个结合,插入操作时通过二分查找找到要插入的位置.

#include <stdio.h>
// 打印数组a
void printArr(int a[],int n){
    for (int i = 0; i < n; ++i)
    {
        printf("%d\t",a[i]);
    }
    printf("\n");
}

void ModInsertSort(int a[],int n){
    int i,j,temp,left,right,mid;

    for ( i = 1; i < n; ++i)
    {
      left=0;
      temp=a[i];
      right=i-1; 
      while(left<=right){
        mid=(left+right)/2;
        if(a[mid]>temp){
            right=mid-1;
         }else{
           left=mid+1;
         }
      }
      for ( j = i-1; j >right;j--)
        a[j+1]=a[j];

      a[right+1]=temp;
    }
}

int main(){
    int a1[]={10,111,22,31,14,57,46,89,39};
    ModInsertSort(a1,9);
    printArr(a1,9);
}
输出结果:
yaopans-MacBook-Pro:algorithm yaopan$ ./a.out 
10  14  22  31  39  46  57  89  111

JAVA描述

public class BinInserSort {

    //二分插入排序

    public static void ModInsertSort(int a[]){
        int i,j,right,left,mid,temp;
        for (i =1; i < a.length; ++i) {
            temp=a[i];
            left=0;
            right=i-1;
            while(left<=right){
                 mid=(left+right)/2;
                 if(a[mid]>temp){
                     right=mid-1;
                 }else{
                     left=mid+1;
                 }
            }

            for(j=i-1;j>right;j--){
                a[j+1]=a[j];
            }
            a[right+1]=temp;
        }
    }
    public static void printArry(int[] a){
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+"\t");
        }
        System.out.println("\n");
    }
    public static void main(String[] args) {
        int a[]={1,2,34,24,5,6,7,8,77,90,37,19,20};
        System.out.println("排序前:");
        printArry(a);
        ModInsertSort(a);
        System.out.println("排序后:");
        printArry(a);

    }
}
排序前:
1   2   34  24  5   6   7   8   77  90  37  19  20  

排序后:
1   2   5   6   7   8   19  20  24  34  37  77  90  
目录
相关文章
|
2月前
|
算法 搜索推荐
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
本文介绍了冒泡排序、选择排序和插入排序三种基础排序算法的原理、实现代码和测试结果。
24 0
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
|
5月前
|
搜索推荐 测试技术
【数据结构常见七大排序(一)】—插入排序篇【直接插入排序】And【希尔排序】
【数据结构常见七大排序(一)】—插入排序篇【直接插入排序】And【希尔排序】
|
6月前
|
机器学习/深度学习 算法 搜索推荐
数据结构算法--2 冒泡排序,选择排序,插入排序
**基础排序算法包括冒泡排序、选择排序和插入排序。冒泡排序通过相邻元素比较交换,逐步将最大值“冒”到末尾,平均时间复杂度为O(n^2)。选择排序每次找到剩余部分的最小值与未排序部分的第一个元素交换,同样具有O(n^2)的时间复杂度。插入排序则类似玩牌,将新元素插入到已排序部分的正确位置,也是O(n^2)复杂度。这些算法适用于小规模或部分有序的数据。**
|
6月前
|
算法 搜索推荐
数据结构与算法-插入排序
数据结构与算法-插入排序
33 2
|
7月前
|
存储 搜索推荐 算法
[数据结构]————排序总结——插入排序(直接排序和希尔排序)—选择排序(选择排序和堆排序)-交换排序(冒泡排序和快速排序)—归并排序(归并排序)
[数据结构]————排序总结——插入排序(直接排序和希尔排序)—选择排序(选择排序和堆排序)-交换排序(冒泡排序和快速排序)—归并排序(归并排序)
|
7月前
|
C语言
【C语言/数据结构】排序(直接插入排序|希尔排序)
【C语言/数据结构】排序(直接插入排序|希尔排序)
53 4
|
7月前
|
搜索推荐 算法 C++
[数据结构]-玩转八大排序(一)&&插入排序&&选择排序
[数据结构]-玩转八大排序(一)&&插入排序&&选择排序
|
6月前
|
人工智能 算法 C语言
数据结构与算法——简单排序-冒泡排序、插入排序,时间复杂度下界(图示、代码、时间复杂度、定理)
数据结构与算法——简单排序-冒泡排序、插入排序,时间复杂度下界(图示、代码、时间复杂度、定理)
44 0
|
6月前
|
存储 搜索推荐
深入了解数据结构第四弹——排序(1)——插入排序和希尔排序
深入了解数据结构第四弹——排序(1)——插入排序和希尔排序
31 0
|
7月前
|
存储 算法 搜索推荐
【数据结构与算法】:插入排序与希尔排序
欢迎大家来到初阶数据结构的最后一小节:排序
【数据结构与算法】:插入排序与希尔排序