数据结构(排序一)
Posted tianliang-2000
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构(排序一)相关的知识,希望对你有一定的参考价值。
排序
影响算法性能的几个因素:时间性能,辅助空间,算法的复杂度
冒泡排序
- 从头开始比较相邻两元素的大小(大的放后面),从头比较到尾时就确定了尾部是最大值,循环n-1次就确定了后n-1个记录的顺序正确,剩下的头,这时当也正确了
- 改进:增加一个标准,用于判断这次循环中有没有交换数据,若没有就表明已经排序完毕,不需要再继续进行不必要的循环
1 void BubbleSort(int a[],int n){ 2 int i,j,flog=1,k; 3 for(i=0;i<n-1 && flog;i++){ 4 flog=0; 5 for(j=0;j<n-i-1;j++){ 6 if(a[j]>a[j+1]){ 7 flog=1; 8 k=a[j]; 9 a[j]=a[j+1]; 10 a[j+1]=k; 11 } 12 } 13 } 14 }
选择排序
- 选择排序的中心思路是找出最小值放在头部,然后再找出次小值放在次头部,由此早出n-1此最大值就排出应有顺序
1 void SelectSort(int a[],int n){ 2 int i,j,min,k; 3 for(i=0;i<n-1;i++){ 4 min=i; 5 for(j=i+1;j<n;j++) 6 if(a[min]>a[j]) 7 min=j; 8 k=a[min]; 9 a[min]=a[i]; 10 a[i]=k; 11 } 12 }
直接插入排序
- 直接插入排序的中心思路是把一个记录插入到一个有序表中,插入后依旧保持有序表有序,长度加一
1 void InsertSort(int a[],int n){ 2 int i,j,temp; 3 for(i=1;i<n;i++){ 4 if(a[i]<a[i-1]){ 5 temp=a[i]; 6 //注:这里要手动检测越界问题 7 for(j=i-1;a[j]>temp && j>=0;j--) 8 a[j+1]=a[j]; 9 a[j+1]=temp; 10 } 11 } 12 }
以上是关于数据结构(排序一)的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段
ElasticSearch学习问题记录——Invalid shift value in prefixCoded bytes (is encoded value really an INT?)(代码片段