2.常见算法的时间复杂度

一.冒泡算法
自己的理解:
对于n个数,
第1趟:比较n-1次才能找出最大(最小)的数字,
第2趟:比较n-2次,
第3趟:比较n-3次
... ...
第n-1趟: 比较1次。(完结)

特点:每趟比较都是相邻的两个数比较,然后把两个之中较大(升序)的放在后面,一趟完毕,最大的数字就被找出来了,下次不再比较。
对应的代码:

mian(){
   int a[10],i,j; 
   int t; //临时变量 
  
   /*输入10个数据*/ 
   for(i=0;i<10;i++){ scanf("%d",&a[i]); } 
   
   /*开始冒泡排序*/ 
   for(j=0;j<9;j++){ 
          for(i=0;i<9-j;i++) 
                 if(a[i]<a[i+1]) { 
                     /*相邻元素比较,交换大的放前面*/
                     t=a[i]; 
                     a[i]=a[i+1]; 
                     a[i+1]=t; 
                } 
          }
   } 
   //此处的9,实质是n-1.
 }

//时间复杂度O(n^2)



二.选择排序
原理:
选择排序很简单,他的步骤如下:

从左至右遍历,找到最小(大)的元素的下标,然后与第一个元素交换。
从剩余未排序元素中继续寻找最小(大)元素,然后与第二个元素进行交换。
以此类推,直到所有元素均排序完毕。

之所以称之为选择排序,是因为每一次遍历未排序的序列我们总是从中选择出最小的元素。

 public void sort(){ 
       for(int i = 0; i < arraytoSort.length - 1 ;  i++){
            int min = i;
            int temp;           
            //找出最小值的下标
            for(int j = i + 1;  j < arraytoSort.length ; j++){
                if(arraytoSort[j]  < arraytoSort[min]){
                    min = j;
                 }
            }
            //交换i与min的数组元素,下次+1不再比较了
            temp = arraytoSort[min];
            arraytoSort[min] = arraytoSort[i];
            arraytoSort[i] = temp;
        }
    }

//时间复杂度O(n^2).

三.常用数据结构的时间复杂度
干货分享:http://blog.csdn.net/stardhb/article/details/50453127

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 总结一下常见的排序算法。 排序分内排序和外排序。内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序...
    jiangliang阅读 1,375评论 0 1
  • 排序的基本概念 在计算机程序开发过程中,经常需要一组数据元素(或记录)按某个关键字进行排序,排序完成的序列可用于快...
    Jack921阅读 1,459评论 1 4
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,220评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,743评论 0 15
  • 一、 单项选择题(共71题) 对n个元素的序列进行冒泡排序时,最少的比较次数是( )。A. n ...
    貝影阅读 9,245评论 0 10