每日一题(91) - 插入排序
来源:互联网 发布:matlab中矩阵的转置 编辑:程序博客网 时间:2024/05/22 08:24
题目来自网络
题目(1):基于数组的插入排序
思路:总是把待排序元素插入已排序的元素集合中,程序的重点是查找待排序元素的位置。
查找待排序元素的位置时,
对于数组,既可以从前往后找,也可以由后往前找。
对于链表,可以从前往后找。
代码:
void InsertSort(int nArr[],int nLen){int j = 0;for (int i = 2;i <= nLen;i++){if (nArr[i] < nArr[i - 1]){nArr[0] = nArr[i];j = i - 1;while(nArr[0] < nArr[j]){nArr[j + 1] = nArr[j];j--;}nArr[j + 1] = nArr[0];}}}
题目(2):基于链表的插入排序
思路:基于链表的插排,可以看成一个旧链表中的一个结点要插入到一个新链表的结点中。
代码:
#include <iostream>using namespace std;struct ListNode{int m_nData;ListNode* pNext;};void InsertSort(ListNode*& pHead){ListNode* pCurOld = pHead;ListNode* pCurOldNext = pHead;ListNode* pCurNew = pHead;ListNode* pLast = NULL;pHead = NULL;while(pCurOld != NULL){pCurOldNext = pCurOld -> pNext;if (pHead == NULL){pCurOld->pNext = pHead;pHead = pCurOld;pLast = pCurOld;}else if (pHead->m_nData > pCurOld->m_nData){pCurOld->pNext = pHead;pHead = pCurOld;}else if (pLast->m_nData <= pCurOld->m_nData){pLast->pNext = pCurOld;pCurOld->pNext = NULL;pLast = pCurOld;}else{pCurNew = pHead;while(pCurNew->pNext->m_nData < pCurOld->m_nData){pCurNew = pCurNew->pNext;}pCurOld->pNext = pCurNew->pNext;pCurNew->pNext = pCurOld;}pCurOld = pCurOldNext;}}void Print(ListNode* pHead){while(pHead != NULL){cout<<pHead->m_nData<<" ";pHead = pHead->pNext;}cout<<endl;}void CreateList(ListNode** pHead,int nLen)//头指针使用指针的指针 { ListNode* pCur = NULL; ListNode* pNewNode = NULL; for (int i = 0;i < nLen;i++) { pNewNode = new ListNode; cin>>pNewNode->m_nData; pNewNode->pNext = NULL; if (*pHead == NULL) { *pHead = pNewNode; pCur = *pHead; } else { pCur->pNext = pNewNode; pCur = pNewNode; } } } int main(){int nLen = 4;ListNode* pHead = NULL;CreateList(&pHead,nLen);InsertSort(pHead);Print(pHead);system("pause");return 1;}
- 每日一题(91) - 插入排序
- [每日一算法]排序之插入排序
- 每日实现一算法之插入排序
- 每日学算法(一):插入排序
- 每日一练--直接插入排序
- 每日一题32:排序
- <每日一题>快速排序
- <每日一题>冒泡排序
- 每日一练(1)插入排序算法
- 每日一题(92) - 快速排序
- 每日一题(92) - 归并排序
- 每日一题(94) - 堆排序
- 每日一题之排序算法专题
- 每日一题4:快速排序
- 每日一题6:位图向量排序
- 每日一题30:拓补排序
- Nswoj每日一题:一种排序
- <几天一题>插入排序
- C++内联函数
- 令人头疼的报表
- 不用中间变量交换两个整形变量值
- 未来是 Web App 的天下吗?
- uva 116 Unidirectional TSP
- 每日一题(91) - 插入排序
- 离散事件仿真简例——银行排队系统
- Codeforces Round #197 (Div. 2)
- ORACLE FLASHBACK QUERY 知识整理
- 黑马程序员------面向对象(No.3)(static、静态代码块、封装、说明文档制作、main函数)
- 设计模式系列4-抽象工厂模式
- 个人知识管理
- 用户体验和用户界面之间的差别
- java Gui 键盘监听事件