1. 程式人生 > 其它 >C++ 三種簡單排序 冒泡 選擇 插入

C++ 三種簡單排序 冒泡 選擇 插入

技術標籤:演算法排序演算法資料結構

本來是大一C語言基礎,就在這裡記錄一下,就當存個板子

簡單插入排序

插排是最簡單一種排序方法,也是複雜度較高的一種

void Sort::insert_sort(int *num) {
    for (int i = 0; i < 13; i++) {
        for (int j = 0; j < i; j++) {
            if (num[i] > num[j]) {
                int temp = num[i];
                //向後移
                for
(int k = i - 1; k >= j; k--) { num[k + 1] = num[k]; } num[j] = temp; } } } }

冒泡(帶flag)

插入排序的複雜度高,但是是一種穩定的排序方法

#include "iostream"

void bubble(int a[]) {
    int i, j, flag, temp;
    flag = 1;
    for (i = 0; i <
10; i++) { flag = 0; for (j = 9; j > i; j--) { if (a[j] > a[j - 1]) { flag = 1; temp = a[j]; a[j] = a[j - 1]; a[j - 1] = temp; //swap(a[j], a[j - 1]); } if (flag == 0
) return; } } } int main() { int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; bubble(a); for(int i=0;i<10;i++) std::cout<<a[i]<<" "<<std::flush; }

輸出結果:
在這裡插入圖片描述

簡單氣泡排序

冒泡也是一種穩定的演算法,但是複雜度也挺高的

void Sort::bubble(int *num) {
    //從前向後冒泡
    /*for (int i = 7; i >= 0; i--) {
        for (int j = 0; j < i; j++) {
            if (num[i] > num[j]) {
                swap(num[i], num[j]);
            }
        }
    }*/
    //從後向前冒泡
    for (int i = 0; i < 13; i++) {
        for (int j = 12; j > i; j--) {
            if (num[i] > num[j]) {
                swap(num[i], num[j]);
            }
        }
    }
}

選擇排序

選擇排序相對於簡單插入排序,複雜度降低
但同時是一個不穩定的排序方法

void Sort::choose(int *num) {
    int i;
    int j;
    /*for (i = 0; i < 13; i++) {
        int max_index = i;
        for (j = i; j < 13; j++) {
            if (num[j] > num[max_index])  max_index = j;
        }
        swap(num[i], num[max_index]);
    }*/
    for (i = 12; i >= 0; i--) {
        int max_index = i;
        for (j = 0; j < i; j++) {
            if (num[j] < num[max_index]) max_index = j;
        }
        swap(num[i], num[max_index]);
    }
}