排序算法

image

前沿

今天咱們來看看幾種常見的排序算法算法

插入排序

定義

插入排序的算法描述是一種簡單直觀的排序算法。它的工做原理是經過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。spa

描述

  • 從第一個元素開始,該元素能夠認爲已經被排序
  • 取出下一個元素,在已經排序的元素序列中從後向前掃描
  • 若是該元素(已排序)大於新元素,將該元素移到下一位置
  • 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
  • 將新元素插入到該位置後
  • 重複步驟 2~5

複雜度

時間複雜度O(N^2)code

空間複雜度O(1)blog

復法

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)it

空間複雜度O(1)io

算法

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;  
            }  
        }  
    }  
}

選擇排序

定義

選擇排序,是一種簡單直觀的排序算法。它的工做原理:首先在末排序列中找到最小(大)元素,存放到排序序列的起始位置,直到所有待排序的數據元素排完。class

複雜度

時間複雜度爲O(n^2)原理

空間複雜度爲O(1)im

算法

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;
    }
}

致謝

感謝你看完這篇文章,有什麼不對的地方歡迎指出,謝謝🙏

相關文章
相關標籤/搜索