1. 程式人生 > >直接插入排序(高級版)之C++實現

直接插入排序(高級版)之C++實現

include ostream 源代碼 cpp -s 臨時 ios 結束 中間變量

直接插入排序(高級版)之C++實現

一、源代碼:InsertSortHigh.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 一種查找比較操作和記錄移動操作交替地進行的方法。 19 具體做法: 20  將待插入記錄R[i]的關鍵字從右向左依次與有序區中記錄R[j](j=i-1,i-2,…,1)的關鍵字進行比較: 21  ① 若R[j]的關鍵字大於R[i]的關鍵字,則將R[j]後移一個位置; 22 ②若R[j]的關鍵字小於或等於R[i]的關鍵字,則查找過程結束,j+1即為R[i]的插入位置。
23  關鍵字比R[i]的關鍵字大的記錄均已後移,所以j+1的位置已經騰空,只要將R[i]直接插入此位置即可完成一趟直接插入排序。 24 25 */ 26 int insertSort(int array[], int n) 27 { 28 //定義變量,記錄交換次數 29 int count = 0; 30 //定義中間變量,做為臨時交換變量 31 int temp; 32 //遍歷數組(進行排序) 33 cout << "開始對數組進行排序了..." << endl; 34 for (int i = 1; i < n; i++)
35 { 36 for (int j = i; j >= 1; j--) 37 { 38 cout << "" << (i + 1) << "趟第" << (j + 1) << "次排序" << endl; 39 if (array[j] < array[j - 1]) 40 { 41 temp = array[j]; 42 array[j] = array[j - 1]; 43 array[j - 1] = temp; 44 cout << array[j] << "" << array[j + 1] << "互換了" << endl; 45 //輸出此時數組的順序 46 cout << "數組此時的順序是:"; 47 print(array, 10); 48 //每交換一次,記錄數加1 49 count++; 50 } 51 else 52 { 53 break; 54 } 55 } 56 } 57 cout << "數組排序結束了..." << endl; 58 return count; 59 } 60 61 int main() 62 { 63 //定義待排序的一維數組 64 int array[] = { 1, 3, 4, 5, 2, 6, 10, 9, 8, 7 }; 65 //輸出原始數組 66 cout << "原始數組是:" << endl; 67 print(array, 10); 68 //對數組進行排序 69 int count = insertSort(array, 10); 70 //輸出排序後的數組 71 cout << "排序後的數組是:" << endl; 72 print(array, 10); 73 cout << "共交換" << count << "" << endl; 74 return 0; 75 }

二、運行效果

技術分享

技術分享

直接插入排序(高級版)之C++實現