演算法筆記 排序

2021-10-24 04:55:51 字數 1977 閱讀 7164

o(nlogn)

比如 5,8,5,2,9 ,選擇排序演算法排序,第一次找到最小元素 2,與第乙個 5 交換位置,那第乙個 5 和中間的 5 順序就變了,所以不穩定

比如序列 6,8,7,6,3,5,9,4,在經過第一次分割槽操作之後,兩個 6 的相對先後順序就會改變

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

/* 基於比較的排序

o(n*2)

氣泡排序 穩定

插入排序 穩定

選擇排序 不穩定

o(nlogn)

歸併排序 穩定

快速排序 不穩定

*/// 插入排序

void

insert_sort

(int arr,

int len)

arr[j+1]

=tmp;}}

// 氣泡排序

void

bubble_sort

(int arr,

int len)

}printf

("\n");

if(flag)

break;}

}// 選擇排序

void

select_sort

(int arr,

int len)

}swap

(arr[mini]

,arr[i]);

}}// 歸併排序

void

merge

(int arr,

int low,

int mid,

int high)

,c=0

;int p = low,q=mid+1;

while

(p<=mid&&q<=high)

else

}while

(p<=mid)tmp[c++

]=arr[p++];

while

(q<=high)tmp[c++

]=arr[q++];

memcpy

(arr+low,tmp,

sizeof

(int)*

(high-low+1)

);}void

merge_sort

(int arr,

int low,

int high)

void

merge_sort

(int arr,

int len)

// 快速排序

intpartition

(int arr,

int l,

int r)

else

}swap

(arr[p]

,arr[r]);

return p;

}void

quick_sort

(int arr,

int l,

int r)

void

quick_sort

(int arr,

int len)

intmain

(int argc,

char

* ar**)

;// insert_sort(arr,10);

// bubble_sort(arr,10);

// select_sort(arr,10);

// merge_sort(arr,10);

quick_sort

(arr,10)

;for

(int i=

0; i<

10; i++

)return0;

}

排序演算法筆記

1 直接插入排序 on 2,穩定的 將最左邊的作為乙個有序數列 設立哨兵,比較並插入已形成的有序數列中。2 希爾排序 時效不好分析,不穩定 直接插入排序的公升級版,調整不同的增量d 2 縮小增量排序,3 快速排序的思想是分治思想 概括來就是在分治的過程中,每次以最後乙個元素為基準,兩個index指向...

排序演算法筆記

一些總結的比較好的部落格 1.排序學習筆記 2.部分排序方法的整理 1 外層迴圈將排序好的除去 2 內層迴圈將沒排好的陣列進行前後比較大小,每經過乙個迴圈,最大的數都在最後面 穩定排序,時間複雜度o n2 void bubblesort vector int arr 第一層下來最大的值已經冒泡到最上...

演算法筆記 排序演算法 插入排序

插入排序的方法就類似於 在鬥地主發牌時,一張張牌地拿起並插入到自己手中的牌堆中。假設陣列 arr 有n個無序元素。每一次的插入就是在區間 0,i 中找到 arr i 1 對應的位置並插入。0,i 就相當於我們手中牌堆,arr i 1 就相當於下一張要插入的牌。直到沒有下乙個要插入的數,該陣列就變得有...