• 直接插入排序(初级版)之C++实现


    直接插入排序(初级版)之C++实现

    一、源代码:InsertSortLow.cpp

     1 /*直接插入排序思想:
     2  假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n]。
     3  从i=2起直至i=n为止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个记录的有序区。
     4  */
     5 
     6 #include<iostream>
     7 using namespace std;
     8 /*定义输出一维数组的函数*/
     9 void print(int array[], int n)
    10 {
    11     for (int i = 0; i < n; i++)
    12     {
    13         cout << array[i] << " ";
    14     }
    15     cout << endl;
    16 }
    17 /*
    18 首先在当前有序区R[1..i-1]中查找R[i]的正确插入位置k(1≤k≤i-1);
    19 然后将R[k..i-1]中的记录均后移一个位置,腾出k位置上的空间插入R[i]。
    20   注意:
    21      若R[i]的关键字大于等于R[1..i-1]中所有记录的关键字,则R[i]就是插入原位置。
    22 */
    23 int insertSort(int array[], int n)
    24 {
    25     //定义变量,记录交换次数
    26     int count = 0;
    27     //定义中间变量,做为临时交换变量
    28     int temp;
    29     int j;
    30     //遍历数组(进行排序)
    31     cout << "开始对数组进行排序了..." << endl;
    32     for (int i = 1; i < n; i++)
    33     {
    34         //当左边元素大于右边元素时
    35         if (array[i] < array[i - 1])
    36         {
    37             //将当前的数组元素存储到临时变量中
    38             temp = array[i];
    39             //将从i位置(比temp大的元素)开始的数组元素整体后移
    40             for (j = i - 1; j >= 0 && array[j]>temp; j--)
    41             {
    42                 cout << "" << (i + 1) << "趟第" << (j + 1) << "次排序" << endl;
    43                 //将数组中的元素整体后移一个单位
    44                 array[j + 1] = array[j];
    45                 cout << array[j] << "" << array[j + 1] << "互换了" << endl;
    46                 //输出此时数组的顺序
    47                 cout << "数组此时的顺序是:";
    48                 print(array, 10);
    49                 //每交换一次,记录数加1
    50                 count++;
    51             }
    52             array[j + 1] = temp;
    53         }
    54     }
    55     cout << "数组排序结束了..." << endl;
    56     return count;
    57 }
    58 
    59 int main()
    60 {
    61     //定义待排序的一维数组
    62     int array[] = { 1, 3, 4, 5, 2, 6, 10, 9, 8, 7 };
    63     //输出原始数组
    64     cout << "原始数组是:" << endl;
    65     print(array, 10);
    66     //对数组进行排序
    67     int count = insertSort(array, 10);
    68     //输出排序后的数组
    69     cout << "排序后的数组是:" << endl;
    70     print(array, 10);
    71     cout << "共交换" << count << "" << endl;
    72     return 0;
    73 }

    二、运行效果

     

  • 相关阅读:
    c/c++设置图片为透明图
    转;说说AngularJS中的$parse和$eval
    转: css3: display:box详解
    转: 深入理解 AngularJS 的 Scope
    转:说说angularjs中的$parse和$eval
    转: 理解AngularJS中的依赖注入
    angularjs学习总结(快速预览版)
    XML基础知识
    读书笔记:js设计模式
    contains 和 ele.compareDocumentPosition确定html节点间的关系
  • 原文地址:https://www.cnblogs.com/zfc-java/p/7390773.html
Copyright © 2020-2023  润新知