插入排序

来源:互联网 发布:linux串口读取gps数据 编辑:程序博客网 时间:2024/06/05 10:52
对于插入排序,用链表实现是最好的选择,而且复杂度也不高,实现起来也比较简单。性能比冒泡排序要高。

例如  5,4,2,3,1这样的数组进行插入排序。

  int data[] = {5,4,2,3,1};

  int length =5;

1.首先建立结点结构体Node.

template <typename T>

struct Node

{

T elem;

Node<T> *next;

};


2.创建一个头结点,创建头结点的目的是方便后续处理。
Node<T> *head = new Node<T>;

Node<T> *pt,*qt;


3.进行插入排序
for( int i=0 ; i<length;++ i)

{

Node<T> *temp = new Node<T>;

temp ->elem =data[i];

temp->elem = NULL;

if( i==0 )//如果是第一个元素,直接插入

head - >next =temp;

else//如果不是首元素则插入比它大的元素前面

{

for( qt =head , pt =head ->next ; pt != NULL ;pt = pt ->next,qt=qt->next)

{
if ( pt->elem >= temp->elem)
{
qt ->next = temp;
temp ->next =pt;
break;
}

}

if(pt == NULL)// 如果未找到比它大的元素,则插入链表末尾

qt->next = temp;

}

}


4.将排好序的链表写入数组

pt =head->next;
for( int i=0; i<length ; ++i)

{

data[i] = pt->elem;

pt = pt ->next;

}

5.至此已经将数组排好序了。释放链表;

pt = head;

while(pt)

{

head = pt;

pt = pt->next;

delete(head);

}


原创粉丝点击