zoukankan      html  css  js  c++  java
  • 数据结构:直接插入排序

    一、直接插入排序

    直接插入排序(Straight Insertion Sort)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。

     1 void insert_sort(int a[], int n)
     2 {
     3     int i, j, k;
     4 
     5     for (i = 1; i < n; i++)
     6     {
     7         //为a[i]在前面的a[0...i-1]有序区间中找一个合适的位置
     8         for (j = i - 1; j >= 0; j--)
     9             if (a[j] < a[i])
    10                 break;
    11         //如找到了一个合适的位置
    12         if (j != i - 1)
    13         {
    14             //将比a[i]大的数据向后移
    15             int temp = a[i];
    16             for (k = i - 1; k > j; k--)
    17                 a[k + 1] = a[k];
    18             //将a[i]放到正确位置上
    19             a[k + 1] = temp;
    20         }
    21     }
    22 }

     c++实现代码:

     1 #include <iostream>
     2 using namespace std;
     3 void insertSort(int* a, int n)
     4 {
     5     int i, j, k;
     6 
     7     for (i = 1; i < n; i++)
     8     {
     9         //为a[i]在前面的a[0...i-1]有序区间中找一个合适的位置
    10         for (j = i - 1; j >= 0; j--)
    11             if (a[j] < a[i])
    12                 break;
    13 
    14         //如找到了一个合适的位置
    15         if (j != i - 1)
    16         {
    17             //将比a[i]大的数据向后移
    18             int temp = a[i];
    19             for (k = i - 1; k > j; k--)
    20                 a[k + 1] = a[k];
    21             //将a[i]放到正确位置上
    22             a[k + 1] = temp;
    23         }
    24     }
    25 }
    27 int main()
    28 {
    29     int i;
    30     int a[] = {20,40,30,10,60,50};
    31     int ilen = (sizeof(a)) / (sizeof(a[0]));
    32 
    33     cout << "before sort:";
    34     for (i=0; i<ilen; i++)
    35         cout << a[i] << " ";
    36     cout << endl;
    37 
    38     insertSort(a, ilen);
    39 
    40     cout << "after  sort:";
    41     for (i=0; i<ilen; i++)
    42         cout << a[i] << " ";
    43     cout << endl;
    44 
    45     return 0;
    46 }
    天晴了,起飞吧
  • 相关阅读:
    内部类概述和访问特点
    权限修饰符 权限
    抽象类和接口作为返回值类型的问题
    抽象类和接口作为形参问题
    jdbc:java数据库连接
    类与类、类与接口、接口与接口的关系
    接口
    抽象类
    多态
    继承中构造方法的关系
  • 原文地址:https://www.cnblogs.com/jianqiao123/p/12129784.html
Copyright © 2011-2022 走看看