数据结构 排序算法

1.冒泡排序:

原理:

  从开始第一对相邻元素开始,对每一对相邻元素进行比较,如果第一个比第二个大,就交换它们两个, 这样直到最后一对元素比较结束,最后的元素就是最大的数,重复这个过程,就可以完成排序.

时间复杂度:

       最优的时间复杂度为:O( n^2 ) ;//当使用标志位方法来判断你是否排好序时,时间复杂度为O(n)

       最差的时间复杂度为:O( n^2 );

       平均的时间复杂度为:O( n^2 );

总结步骤:

     1、外循环是遍历每个元素,每次都放置好一个元素;   

     2、内循环是比较相邻的两个元素,把大/小的元素交换到后面;

     3、等到第一步中循环好了以后也就说明全部元素排序好

示意图:

 

 1           var length = this.array.length
 2           //循环趟数
 3           for (var i = 0; i < length; i++) {
 4            //寻找这趟的最大值冒泡
 5             for (var j = 0; j < length-1-i; j++) {
 6               //相邻元素反序时,交换数值
 7               if(this.array[j]>this.array[j+1]){
 8                 var temp = this.array[j]
 9                 this.array[j] = this.array[j+1]
10                 this.array[j+1] = temp

 

2.选择排序

原理:

  首先找出当前元素中最小的元素,并放到排序序列的起始位置,然后再从剩余的元素中寻找最小的元素,然后放到已排序序列的末尾。以此类推,直到排序完成。

时间复杂度:

       平均时间复杂度:O(n*n)

    最好情况:O(n*n)

  最差情况:O(n*n)

示意图:

 

 1           var length = this.array.length
 2           //外层循环:从0开始到倒数第二个数据,每一趟找出最小值,放到array[i]
 3           for(var i = 0;i < length-1;i++){
 4             var min = i
 5             //内层循环:从i+1和后面的数字比较开始比较
 6             for(var j = min+1; j < length ; j++){
 7             //初始最小值是array[i],如果后一个数小于最小值,则为最小值继续和后面的数比较
 8               if(this.array[min] > this.array[j]){
 9                 min = j
10               }
11             }
12             var temp = this.array[i]
13             this.array[i] = this.array[min]
14             this.array [min] = temp

 

3.插入排序

原理:

  从第二个元素开始(假定第一个元素已经排序了),取出这个元素,在已经排序的元素中从后向前进行比较,如果该元素大于这个元素,就将该元素移动到下一个位置,然后继续向前进行比较,直到找到小于或者等于该元素的位置,将该元素插入到这个位置后.重复这个步骤直到排序完成.

时间复杂度:

       平均时间复杂度:O(n*n)

  最好情况:O(n)

  最差情况:O(n*n)

示意图:

 

 1           var length = this.array.length
 2           //外层循环:从array[1],向前面有序进行插入
 3           for (var i = 1; i<length; i++){
 4             //每次获取array[i],然后和他前面的数字依次进行比较
 5             temp = this.array[i]
 6             j=i
 7             while(this.array[j-1]>temp && j>0){
 8               //如果前面的数字比array[i]大,那就把那个数字后移一位
 9               this.array[j] = this.array[j-1]
10               j--
11             }
12             //直到在前面有序数据里找到array[j]比array[i]小
13             this.array[j] = temp

 

4.希尔排序

5.快速排序(待学)

 

posted @ 2020-08-10 23:27  前端小白白又白  阅读(134)  评论(0)    收藏  举报