直接插入排序(初级版)之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 }

二、运行效果

 

 

转载于:https://www.cnblogs.com/zfc-java/p/7390773.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值