直接插入排序(初级版)之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 }
二、运行效果