数据结构(排序一)

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?)(代码片段

算法排序之堆排序

排序02-直接插入排序法

markdown 数组排序片段