一、總體思想:將乙個記錄直接插入到乙個已經排序好的列表中的對應位置,形成乙個新的列表。直接插入排序為穩定排序。
二、排序過程(公升序):
1、認為第乙個記錄為有序列表。
2、從第二個記錄開始,依次和已經排序的列表中記錄做比較,如果被比較記錄大於該記錄, 則將被比較記錄後移一位,否則將該記錄插入到不大於它的記錄之後。
3、依次處理後續記錄。
三、演算法效率
時間複雜度:o(n^2)
空間複雜度:o(1)
四、**-陣列實現方式
/********************************************
author: zchshen
date: 2017-07-09
brief: ascending order of insert sort by array.
********************************************/
#include
#include
#include
const
int maxarraysize = 128;
void insertsortup(int *array, const
int &count)
else}}
}int main(int argc, char **argv)
if (argc > maxarraysize)
std::cout
<< argc << std::endl;
std::cout
<< argv[1] << std::endl << std::endl;
int arraysize = argc - 1;
int *array = new
int[maxarraysize + 1];
memset(array, 0, maxarraysize + 1);
std::cout
<< "org order:"
<< std::endl;
for (int i=1; i1] = atoi(argv[i]);
std::cout
<< array[i-1] << " ";
}std::cout
<< std::endl;
insertsortup(array, arraysize);
std::cout
<< "ascending order:"
<< std::endl;
for (int i=0; istd::cout
<< array[i] << " ";
}std::cout
<< std::endl;
return
0;}
六、**-鍊錶實現方式
/*************************************
author: zchshen
date: 2017-07-25
brief: ascending order of insert sort by link list(include head)
**************************************/
#include
#include
#include
#include
using namespace std;
typedef struct nodelinknode;
void creatlistbyendinsert(linknode* head)
catch(...)
node->data = rand()%100;
index->next = node;
index = node;
}node->next = null;
}void displaylist(linknode* head)
cout << endl;
}void releaselist(linknode* head)
delete head;
head = null;
}void insertsortup(linknode* head)
remainnode = remainnode->next;
frontnode->next = insertnode;
insertnode->next = curnode;
insertnode = remainnode;
curnode = head;
frontnode = head;
}}int main(int argc, char** argv)
catch(...)
creatlistbyendinsert(head);
displaylist(head);
insertsortup(head);
displaylist(head);
releaselist(head);
return
0;}
直接插入排序演算法
直接插入演算法 有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法 插入排序演算法,插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的 個數加一的有序資料,演算法適用於少量資料的排序,時間複...
直接插入排序演算法
撲克牌是我們幾乎每個人都可能從事過的遊戲。而最基本的撲克玩法都是一邊摸牌,一邊理牌。假如我們拿到了這樣一手牌,如圖9 5 1。啊,似乎是同花順呀,別急,我們得理一理順序才知道是否是真的同花順。請問,如果是你,應該如何理牌呢?應該說,哪怕你是第一次玩撲克牌,只要認識這些數字,理牌的方法都是不用教的。將...
直接插入排序演算法
每次將乙個待排序的記錄按其關鍵字的大小插到前面已經排序的序列中的適當位置,直到全部記錄插入完畢為止。第一趟比較前兩個數,然後把第二個數按大小插入到有序表中 第二趟把第三個資料與前兩個數從後向前掃瞄,把第三個數按大小插入到有序表中 依次進行下去,進行了 n 1 趟掃瞄以後就完成了整個排序過程。將待插入...