2 1基礎演算法(排序)

2022-09-10 10:09:31 字數 1400 閱讀 2437

1.快速排序:基本思想是分治,時間複雜度nlog(n)

1)確定分界點

2)調整區間

3)遞迴處理左右兩段

#include #include 

using

namespace

std;

const

int n = 100010

;int

a[n];

void quick_sort(int a , int l , int

r) quick_sort(a,l,j);

quick_sort(a,j+1

,r);

}int

main()

2.歸併排序 基本思想:分治 , 時間複雜度nlog(n)

1)確定分界點mid = (l + r)/2 ,和快速排序的區別是快排的分界點是值,歸併的分界點是陣列下標

2)遞迴排序左邊和右邊

3)合併

#include using

namespace

std;

const

int n = 100010

;int

a[n],tmp[n];

void merge_sort(int a , int l , int

r)

while(i<=mid) tmp[k++]=a[i++];

while(j<=r) tmp[k++]=a[j++];

for(int i = l , j = 0 ; i <= r ; i++ , j++) a[i]=tmp[j];

}int

main()

3)二分

找到的是從左往右第乙個滿足》=x的數

整數二分:

#include using

namespace

std;

const

int n = 100010

;int

a[n];

intmain()

if(a[l]!=x) printf("

-1 -1\n");

else

printf(

"%d\n

",l);}}

return0;

}

浮點數二分:

輸入浮點數x,找到x的平方根,結果保留6位小數

#include using

namespace

std;

intmain()

printf(

"%.6lf\n

",l);

return0;

}

保留幾位小數,迴圈的時候就多寫兩位,比如6位小數寫1e-8 ;

2 1基礎演算法

1.雙指標 2.位運算 3.離散化 1 去除重複元素 vectorall sort all.begin all.end 排序all.erase unique all.begin all.end all.end 刪除末尾的重複元素 2 include include include using nam...

演算法基礎 排序演算法

1.氣泡排序 原理有一列資料,從第乙個數開始,第乙個和第二個進行比較,如果第乙個大就交換,如果第二個大就不變,再第二個和第三個比較,一次類推,第二輪是從第乙個數開始比到倒數第二個數,第三輪是從第乙個數比到倒數第三個數.以此類推.def bubble nums for j in range len n...

基礎演算法 排序演算法

話不多說,上 include include include include include define n 10000500 long long beg intcnt,n void show time void swap int a,int b 稱這兩個函式為比較函式,函式名即相當於指標,將其寫...