image

前沿

今天我们来看看几种常见的排序算法

插入排序

定义

插入排序的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

描述

  • 从第一个元素开始,该元素可以认为已经被排序
  • 取出下一个元素,在已经排序的元素序列中从后向前扫描
  • 如果该元素(已排序)大于新元素,将该元素移到下一位置
  • 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  • 将新元素插入到该位置后
  • 重复步骤 2~5

复杂度

时间复杂度O(N^2)

空间复杂度O(1)

复法

void InsertionSort(int *arr, int size)    
{    
    int i, j, tmp;    
    for (i = 1; i < size; i++) {    
        if (arr[i] < arr[i-1]) { //如果要大在前 改这个判断 和 arr[j] < temp   
            tmp = arr[i];    
            for (j = i - 1; j >= 0 && arr[j] > tmp; j--) {  
                arr[j+1] = arr[j];    
            }  
            arr[j+1] = tmp;    
        }          
    }    
} 

冒泡排序

描述

比较相邻的元素。如果第一个比第二个大,就交换它们两个

复杂度

时间复杂度O(n^2)

空间复杂度O(1)

算法

void BubbleSort(int *arr, int size)  
{  
    int i, j, tmp;  
    for (i = 0; i < size - 1; i++) {  
        for (j = 0; j < size - i - 1; j++) {  
            if (arr[j] > arr[j+1]) {  
                tmp = arr[j];  
                arr[j] = arr[j+1];  
                arr[j+1] = tmp;  
            }  
        }  
    }  
}  

选择排序

定义

选择排序,是一种简单直观的排序算法。它的工作原理:首先在末排序列中找到最小(大)元素,存放到排序序列的起始位置,直到全部待排序的数据元素排完。

复杂度

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

空间复杂度为O(1)

算法

void SelectionSort(int *arr, int size)
{
    int i,j,temp,k;
    for (i = 0; i < size-1; i++) {
        k = i;
        for (j = i+1; j < size; j++) {
            if (arr[j] > arr[k]) {
                k = j;
            }
        }
        temp = arr[k];
        arr[k] = arr[i];
        arr[i] = temp;
    }
}

致谢

感谢你看完这篇文章,有什么不对的地方欢迎指出,谢谢🙏


hpinke
125 声望3 粉丝

A better you a big world


« 上一篇
树的解读
下一篇 »
PHP之Web安全