码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构(排序一)

时间:2020-05-14 15:13:15      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:nbsp   microsoft   ros   mil   循环   mic   最小值   数据结构   style   

排序

  影响算法性能的几个因素:时间性能,辅助空间,算法的复杂度

冒泡排序

  • 从头开始比较相邻两元素的大小(大的放后面),从头比较到尾时就确定了尾部是最大值,循环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 }

 

数据结构(排序一)

标签:nbsp   microsoft   ros   mil   循环   mic   最小值   数据结构   style   

原文地址:https://www.cnblogs.com/TianLiang-2000/p/12888516.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!