数据结构(排序一)

排序算法

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

冒泡排序spa

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

选择排序code

  • 选择排序的中心思路是找出最小值放在头部,而后再找出次小值放在次头部,由此早出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 }

直接插入排序blog

  • 直接插入排序的中心思路是把一个记录插入到一个有序表中,插入后依旧保持有序表有序,长度加一
 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 }
相关文章
相关标签/搜索