#include <iostream>
using namespace std;

//LinkedList API
typedef struct ListNode {
int key;
struct ListNode * next;
struct ListNode * prev;
}ListNode;

#define LISTSIZE 1000
ListNode ListNodePool[LISTSIZE];
int NodeNum = 0;

ListNode nil;
ListNode * NIL;

ListNode * getNewNode(){
return & ListNodePool[NodeNum++];
}

void listInit(){
NIL = &nil;
NIL->next = NIL;
NIL->prev = NIL;
NIL->key = 0;
}

void listInsertAfter(ListNode * dstNode, ListNode * NewNode){
NewNode->next = dstNode->next;
NewNode->prev = dstNode;
dstNode->next = NewNode;
NewNode->next->prev = NewNode;
}

void listInsertAtFront(ListNode * node){
listInsertAfter(NIL, node);
}

void listDelete(ListNode * node){
node->prev->next = node->next;
node->next->prev = node->prev;
}

ListNode * listSearch(int k){
ListNode * x = NIL->next;
while(x != NIL && x->key != k){
x = x->next;
}
return x;
}

//end of LinkedList API

int data[LISTSIZE];

void insertSort(int data[], int N){
for(int i = 1; i < N; i++){
int key = data[i];
int j;
for(j = i - 1; j >= 0; j--){
if(data[j] > key){
data[j + 1] = data[j];
}else{
break;
}
}
data[j + 1] = key;
}
}

void showData(int N){
for(int i = 0; i < N; i++){
cout << data[i] << " ";
}
cout << endl;
}

void showList(){
ListNode * curNode = NIL->next;
while(curNode != NIL){
cout << curNode->key << " ";
curNode = curNode->next;
}
cout << endl;
}

void listInsertSort(){

ListNode * curNode = NIL->next->next;
ListNode * tmpNode;
while(curNode != NIL){
//cout << curNode->key << " " << endl;
ListNode * dstNode = NIL->next;
while(dstNode != curNode && dstNode->key < curNode->key){
dstNode = dstNode->next;
}

dstNode = dstNode->prev;
tmpNode = curNode->next;
listDelete(curNode);
listInsertAfter(dstNode, curNode);

curNode = tmpNode;
}
}


void main(){
freopen("input.txt", "r", stdin);
int N;
cin >> N;

for(int i = 0; i < N; i++){
cin >> data[i];
cout << data[i] << " " ;
}
cout << endl;

listInit();
ListNode * dstNode = NIL;
for(int i = 0; i < N; i++){
ListNode * node = getNewNode();
node->key = data[i];

listInsertAfter(dstNode, node);
dstNode = dstNode->next;
}

ListNode * curNode = NIL->next;
while(curNode != NIL){
cout << curNode->key << " ";
curNode = curNode->next;
}
cout << endl;

insertSort(data, N);
showData(N);

listInsertSort();
showList();
}
计算时间
#include<windows.h>
int main(){
freopen("output.txt", "w", stdout);
DWORD start_time=GetTickCount();
DFS(0);
DWORD end_time=GetTickCount();

printf("result %d, runtime %d ms\n", count, end_time - start_time);
}

 

}
void getNum(char str[5]){
int val = 0;
for (int i = 0; i < 5; i++)
val = val * 26 + str[i] - 'a'; //进制转换
data[val]++; //频率统计
}

for (int i = 0; i < SIZE; i++){
for (int j = 0; j < 5; j++){
data1[i][j] = rand() % 26 +'a';
}
getNum(data1[i]);
printf("%s", data1[i]);
//printf("\n");