【 日常 】 小排序合集 17年4月12日22:17 [ 10 ]
来源:互联网 发布:hybrid端口 编辑:程序博客网 时间:2024/05/21 11:25
/*前言: 好多天前准备记录下自己的坎坷修仙的点滴,以后希望能留下【珍贵的回忆】,萌新的日常代码,大佬互喷*/
代码写的比较繁琐,多多见谅,萌新每天都在努力改变自己
心情:不想吐槽啥,恩对,不吐槽啥,每天感觉无所事事,很无聊的样子的,也每天装作很开心的样子,恩。突然想到了一句话:
【如果不能找到一个与你同行的,那么便独自前行。】
# include <stdio.h># include <stdlib.h># define N 10void ShellSort(int a[]);int main(void){int a[N] = { 10,9,8,7,6,5,4,3,2,1 };ShellSort(a);for (int i = 0; i < N; ++i)printf("%d\t", a[i]);system("pause");return 0;}void ShellSort(int a[]){int i, j, k, gap;int temp;for (gap = N / 2; gap > 0; gap /= 2)//步长{for (i = 0; i < gap; ++i)//0-gap组{for (j = i + gap; j < N; j += gap)//每组开头第二个数,加到gap到最后{for (k = j - gap, temp = a[j]; k >= 0; k -= gap)//插入if (a[k] > temp)a[k + gap] = a[k];elsebreak;a[k + gap] = temp;}}}}
简单的小快排,未使用三点中值,所以不太建议使用,最近没时间,所以我会尽量的快点敲用三点中值法找枢纽元的快排,但是快排的基本思想可以参考
# include <stdio.h># include <stdlib.h># define N 10void QuickSort(int a[], int, int);int main(void){int a[N] = { 7,10,22,3,8,0,11,4,9,12 };QuickSort(a, 0, N - 1);for (int i = 0; i < N; ++i)printf("%d\t", a[i]);system("pause");return 0;}void QuickSort(int a[], int Frist, int Last){if (Frist > Last || Frist < 0 || Last >= N)return;int F, L, mid;int temp;F = Frist;L = Last;temp = a[Frist];while (Frist < Last){while (Frist < Last&&a[Last] > temp)Last--;a[Frist] = a[Last];while (Frist < Last&&a[Frist] < temp)Frist++;a[Last] = a[Frist];}a[Frist] = temp;mid = Frist;QuickSort(a, F, mid - 1);QuickSort(a, mid + 1, L);}
下面是堆排序,首先改变渗透的比较,把原先的最小堆改成最大堆,为了减少存储空间,把最大的放到最后,然后当前个数减少一个,这样就省得花别的空间存储,
排序完成后就是从小到大的排序,如果从大到小,那么就堆改成原先的最小堆就好了,好了不说了,上代码
说下的就是如果你习惯了,不使用0结点存储的话,那么如果 父亲 i 那么 左孩子 2 i 右孩子2 i + 1
/*----------------------------------------构建大堆,堆排序后从小到大算上0 左奇右偶)右父【 child/2-1】右 【 child 】左【child-1】父亲为 i 左孩子为 2 i 右孩子为 2(i+1)-------------------------------------------*/# include <stdio.h># include <malloc.h># include <stdlib.h># define MaxSize 20struct HeapNode{int *pHeapData;int CurrentSize;int Capacity;};HeapNode* InitHeapNode(HeapNode*);void AddHeapNum(HeapNode*, int);void HeapSort(HeapNode*);void PercolateUp(HeapNode*, int );void PercolateDown(HeapNode*,int);void TrevalHeap(HeapNode*);int main(void){HeapNode*pHead = NULL;pHead = InitHeapNode(pHead);AddHeapNum(pHead, 3);AddHeapNum(pHead, 2);AddHeapNum(pHead, 4);AddHeapNum(pHead, 8);AddHeapNum(pHead, 1);AddHeapNum(pHead, 7);AddHeapNum(pHead, 9);printf("\n未排序前:\n");TrevalHeap(pHead);printf("\n排序后:\n");HeapSort(pHead);TrevalHeap(pHead);system("pause");return 0;}HeapNode* InitHeapNode(HeapNode*pHead){if (!pHead){pHead = (HeapNode*)malloc(sizeof(HeapNode));if (!pHead){printf("ERROR:Out of Space \n");exit(-1);}pHead->Capacity = MaxSize;pHead->CurrentSize = 0;pHead->pHeapData = (int*)malloc(sizeof(int)*MaxSize);if (!pHead->pHeapData){printf("ERROR:Out of Space \n");exit(-1);}}return pHead;}void AddHeapNum(HeapNode*pHead, int AddNum){if (!pHead)return;if (pHead->CurrentSize < pHead->Capacity)PercolateUp(pHead, AddNum);elseprintf("\nThe Heap is Full \n");}void HeapSort(HeapNode*pHead){if (!pHead)return;int temp;int Sentinel = pHead->CurrentSize;while (Sentinel > 0){Sentinel--;temp = pHead->pHeapData[Sentinel];pHead->pHeapData[Sentinel] = pHead->pHeapData[0];pHead->pHeapData[0] = temp;PercolateDown(pHead,Sentinel);//下渗}}void PercolateDown(HeapNode*pHead,int CurrentSIZE){if (!pHead)return;int temp;int Parent = 0;int Child = 2 * Parent + 1;//左孩子while (Child < CurrentSIZE)//左孩子在范围内{if ((Child != (CurrentSIZE - 1)) && pHead->pHeapData[Child] < pHead->pHeapData[Child + 1])//存在右且右大左Child = Child + 1;//左右比较找最大if (pHead->pHeapData[Parent] < pHead->pHeapData[Child]){temp = pHead->pHeapData[Parent];pHead->pHeapData[Parent] = pHead->pHeapData[Child];pHead->pHeapData[Child] = temp;Parent = Child;//大的成为父亲,原父亲下渗成为当前的孩子Child = 2 * Parent + 1;}elsebreak;}}void PercolateUp(HeapNode*pHead,int PercolateNum){if (!pHead)return;int Child = pHead->CurrentSize;int Parent=Child;while (Parent >= 0 && pHead->pHeapData[Parent] <= PercolateNum){pHead->pHeapData[Child] = pHead->pHeapData[Parent];//父亲下渗Child = Parent;if (Child % 2 == 0)//偶右Parent = (Child / 2) - 1;elseParent = Child / 2;}pHead->pHeapData[Child] = PercolateNum;pHead->CurrentSize++;}void TrevalHeap(HeapNode*pHead){if (!pHead){printf("ERROR:Out of Space \n");exit(-1);}int Sentinel = 0;while (Sentinel < pHead->CurrentSize){printf("%d\t", pHead->pHeapData[Sentinel]);Sentinel++;}return;}
0 0
- 【 日常 】 小排序合集 17年4月12日22:17 [ 10 ]
- 日常-4月17日2015l
- 【 日常 】 二三查找树 17年4月06日22:22 [ 6 ]
- 【 日常 】 敲二项队列 17年4月10日17:27 [ 8 ]
- 【 日常 】 AVL平衡树 17年3月31日22:41 [ 2 ]
- 【 日常 】 链表的游标 17年4月01日20:39 [ 4 ]
- 【 日常 】 多样伸展树 17年4月01日20:03 [ 3 ]
- 【 日常 】 初敲二叉堆 17年4月04日20:25 [ 5 ]
- 【 日常 】 初敲左式堆 17年4月08日21:21 [ 7 ]
- 17年 12月22日学习计划
- CopyU!v2插件合集 [2014年3月12日更新下载链接]
- 【 日常 】 二叉搜索树 17年3月31日21:45 [ 1 ]
- 12月17日
- 10月17日
- 4月17日
- 微信小程序开发教程、小程序资讯、小程序demo合揖(10月16日更新)
- NYOJ-255-C小加 之 随机数-2013年10月18日17:19:41
- 科技创新项目--小程序设计(4)(07年11月17日)
- javascript 联动菜单V1.0(简单二级菜单)
- 求长方体的长、宽、高 体积和三个面的面积(Java)
- MySQL 1042, "Can't get hostname for your address"问题解决方案
- arcgis for android Geometry获取中心点
- 虚继承和虚函数继承
- 【 日常 】 小排序合集 17年4月12日22:17 [ 10 ]
- XDOJ-1028-数字工程(dp)
- 24点游戏
- C语言复习——数组、字符串
- fastDFS安装
- MySQL数据库
- Hive、MapReduce、Spark分布式生成唯一数值型ID
- 自己动手写PHP框架(二)
- 使用Intent通过Serializable与Parcalable在Activity之间传递对象