国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法基礎(chǔ)學(xué)習(xí)筆記——①排序

這篇具有很好參考價值的文章主要介紹了算法基礎(chǔ)學(xué)習(xí)筆記——①排序。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?博主:命運之光
?專欄:算法基礎(chǔ)學(xué)習(xí)

算法基礎(chǔ)學(xué)習(xí)筆記——①排序


前言:算法學(xué)習(xí)筆記記錄日常分享,需要的看哈O(∩_∩)O,感謝大家的支持!

?快速排序——分治

image.png

因為x參與交換之后仍然會被留在左右區(qū)間中的一個里。

1.確定分界點:(這里的分界點不一定是x,可以隨意取值,常用取值方法如下)
q[l],q[(l+r)/2],q[r],隨機//這里隨機數(shù)的表示:q[rand() % (r - l) + l]
2.調(diào)整區(qū)間:
image.png
3.遞歸處理左右兩段(<=x和>=x這兩段)
image.png
如何實現(xiàn)2:
方法1.
image.png
方法2.
image.png
將兩個指針i,j從兩頭挪向分界點,直到有一個i>=x,此時這個i
需要放到右半邊,一個j<x,此時這個j需要放到左半邊,此時交
換i.j(swap),故此時i<=x,j>x,直到i,j相遇就可以把整個區(qū)間
一分為二
image.png
j的后面(不包括j)>=3,i的前面(不包括i)<=3(注意邊界)
??代碼實現(xiàn)
image.png
image.png
??快速排序模板:

void quick_sort(int q[], int l, int r)//簡單理解:這里的l一般0,r一般是個數(shù)-1(減去第0個數(shù))
{
     if (l >= r) return;//排序首先看邊界,如果區(qū)間里沒有數(shù)或只有一個數(shù)則不用排序,否則如下進行上述的1,2,3點
     int i = l - 1, j = r + 1 ,x = q[l + r >> 1];//問:為什么不是i=l,j=r?答:因為是先移動完指針再進行判斷,因此指針要先放在兩個指針的左右兩側(cè)一格,這樣往中間移動一格后才能到正真的邊界,注意:這里的i,j,l,r都為下標(biāo)。
     while (i < j) 
     {
         do i ++ ; while (q[i] < x);//指針移動的判斷不帶等號,因為如果選取的x是數(shù)組里最大的數(shù),那么一直滿足q[i]<=x,i會一直++發(fā)生越界都不會停下,j同理。eg.123,選取3,i<=3,i++,i=3也會向后繼續(xù)移動,已越界,錯誤,故此不能加=
         do j -- ; while (q[j] > x);
         if (i < j) swap(q[i], q[j]);//如果這兩個指針還沒有相遇,則交換,如果不用swap可以寫:int t=q[i];q[i]=q[j];q[j]=t;
     }
     quick_sort(q, l, j);
     quick_sort(q, j + 1, r);//eg.1 2排序:
}

??對以上快速排序代碼進行測試,模板可用(●’?’●)!
image.png
??測試代碼

#include<bits/stdc++.h> 
using namespace std;
void quick_sort(int q[], int l, int r)
{
     if (l >= r) return;
     int i = l - 1, j = r + 1 ,x = q[l + r >> 1];
     while (i < j) 
     {
         do i ++ ; while (q[i] < x);
         do j -- ; while (q[j] > x);
         if (i < j) swap(q[i], q[j]);
     }
     quick_sort(q, l, j);
     quick_sort(q, j + 1, r);
}
int main()
{
	int a[5]={5,3,2,8,6};//對5,3,2,8,6進行排序 
	quick_sort(a,0,4);//傳入數(shù)組,傳入l,r進行快速排序 
	for(int i;i<5;i++)
	{
		cout<<a[i]<<" ";	//快速排序結(jié)果為:23568 
	}
	return 0;
}

?歸并排序——分治 O(nlogn)

image.png
1.確定分界點:mid=(l+r)/2

要格外注意分界點:歸并排序是下標(biāo)的中間值,快速排序是隨機一個數(shù)組里面的值

2.遞歸排序left,right
3.歸并——合二為一 //實際是一個雙指針?biāo)惴?
image.png
??歸并排序模板:

void merge_sort(int q[], int l, int r)
{
	int tmp[5];//可變
	if (l >= r) return;
	int mid = l + r >> 1;
	merge_sort(q, l, mid);//l是左半邊起點
	merge_sort(q, mid + 1, r);//mid+1是右半邊起點
	int k = 0, i = l, j = mid + 1;
	while (i <= mid && j <= r)//i,j分別是左右兩邊的指針
	   if (q[i] <= q[j]) tmp[k ++ ] = q[i ++ ];//tmp[k++]=q[i++]等價于tmp[k]=q[i],k++,i++
	   else tmp[k ++ ] = q[j ++ ];//比較q[i],q[j],哪個小就把哪個放到tmp里(最后tmp的順序就可以從小到大依次排)
    while (i <= mid) tmp[k ++ ] = q[i ++ ];
    while (j <= r) tmp[k ++ ] = q[j ++ ];//把左右兩邊沒有循環(huán)完的數(shù)放到最后(因為左右兩邊本身就已經(jīng)從小到大排好序故這些數(shù)一定從小到大)
    for (i = l, j = 0; i <= r; i ++, j ++ ) q[i] = tmp[j];//將tmp里的數(shù)復(fù)制回q中
}

??對以上快速排序代碼進行測試,模板可用(●’?’●)!
image.png
??測試代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-469879.html

#include<bits/stdc++.h> 
using namespace std;
void merge_sort(int q[], int l, int r)
{
	int tmp[5];
	if (l >= r) return;
	int mid = l + r >> 1;
	merge_sort(q, l, mid);
	merge_sort(q, mid + 1, r);
	int k = 0, i = l, j = mid + 1;
	while (i <= mid && j <= r)
	   if (q[i] <= q[j]) tmp[k ++ ] = q[i ++ ];
	   else tmp[k ++ ] = q[j ++ ];
    while (i <= mid) tmp[k ++ ] = q[i ++ ];
    while (j <= r) tmp[k ++ ] = q[j ++ ];
    for (i = l, j = 0; i <= r; i ++, j ++ ) q[i] = tmp[j];
}
int main()
{
	int a[5]={8,3,2,7,6};//對5,3,2,8,6進行排序 
	merge_sort(a,0,4);//傳入數(shù)組,傳入l,r進行快速排序 
	for(int i;i<5;i++)
	{
		cout<<a[i]<<" ";	//快速排序結(jié)果為:23568 
	}
	return 0;
}

到了這里,關(guān)于算法基礎(chǔ)學(xué)習(xí)筆記——①排序的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【密碼學(xué)基礎(chǔ)】半/全同態(tài)加密算法基礎(chǔ)學(xué)習(xí)筆記

    【密碼學(xué)基礎(chǔ)】半/全同態(tài)加密算法基礎(chǔ)學(xué)習(xí)筆記

    定義:只支持乘法或加法中的一種的同態(tài)加密。同態(tài)加密指的是允許直接對密文進行計算,密文計算結(jié)果解密后與明文直接計算結(jié)果相同。 Paillier加解密過程 Paillier的同態(tài)性 明文加法 = 密文乘法 明文乘法 = 密文指數(shù)冪 Paillier的安全性 基于大整數(shù)分解困難問題 相比Paillier,

    2024年02月13日
    瀏覽(44)
  • 【軟考程序員學(xué)習(xí)筆記】——數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)

    【軟考程序員學(xué)習(xí)筆記】——數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)

    目錄 ???一、數(shù)據(jù)結(jié)構(gòu)概念和分類 ??二、數(shù)組特點存儲方式 ??三、矩陣 特殊矩陣 非特殊矩陣 ??四、棧和隊列 ???五、二叉樹的性質(zhì) ??六、二叉樹的遍歷 (1)前序遍歷(先根遍歷,先序遍歷) (2)中遍歷(中根遍歷) (3)后序遍歷(后根遍歷,后序遍歷) ??七、二叉排序樹 ??八、

    2024年02月12日
    瀏覽(24)
  • 算法基礎(chǔ)學(xué)習(xí)筆記——⑩DFS與BFS\樹與圖

    算法基礎(chǔ)學(xué)習(xí)筆記——⑩DFS與BFS\樹與圖

    ?博主:命運之光 ?專欄:算法基礎(chǔ)學(xué)習(xí) 目錄 DFS與BFS樹與圖 ?DFS ?BFS ??寬搜流程圖如下: ??寬搜流程: ??廣搜模板 ?樹與圖 ??樹是特殊的圖(連通無環(huán)的圖) ??樹與圖的存儲: ??用寬搜框架來搜索圖: 前言: 算法學(xué)習(xí)筆記記錄日常分享,需要的看哈O(∩_∩)O,

    2024年02月09日
    瀏覽(18)
  • 算法基礎(chǔ)學(xué)習(xí)筆記——?高斯消元\組合計數(shù)\容斥原理

    算法基礎(chǔ)學(xué)習(xí)筆記——?高斯消元\組合計數(shù)\容斥原理

    ? 博主: 命運之光 ? 專欄: 算法基礎(chǔ)學(xué)習(xí) 目錄 ?高斯消元 ?組合計數(shù) ??通過預(yù)處理逆元的方式求組合數(shù): ??Lucas定理: ??分解質(zhì)因數(shù)法求組合數(shù): 前言: 算法學(xué)習(xí)筆記記錄日常分享,需要的看哈O(∩_∩)O,感謝大家的支持! 高斯消元(Gaussian Elimination)是一種用于解線

    2024年02月07日
    瀏覽(20)
  • 深度學(xué)習(xí)筆記(七)——基于Iris/MNIST數(shù)據(jù)集構(gòu)建基礎(chǔ)的分類網(wǎng)絡(luò)算法實戰(zhàn)

    深度學(xué)習(xí)筆記(七)——基于Iris/MNIST數(shù)據(jù)集構(gòu)建基礎(chǔ)的分類網(wǎng)絡(luò)算法實戰(zhàn)

    文中程序以Tensorflow-2.6.0為例 部分概念包含筆者個人理解,如有遺漏或錯誤,歡迎評論或私信指正。 截圖和程序部分引用自北京大學(xué)機器學(xué)習(xí)公開課 在神經(jīng)網(wǎng)絡(luò)的構(gòu)建過程中,都避不開以下幾個步驟: 導(dǎo)入網(wǎng)絡(luò)和依賴模塊 原始數(shù)據(jù)處理和清洗 加載訓(xùn)練和測試數(shù)據(jù) 構(gòu)建網(wǎng)絡(luò)

    2024年01月18日
    瀏覽(22)
  • 算法基礎(chǔ)學(xué)習(xí)筆記——④前綴和\差分\雙指針\位運算

    算法基礎(chǔ)學(xué)習(xí)筆記——④前綴和\差分\雙指針\位運算

    ? 博主: 命運之光 ? 專欄: 算法基礎(chǔ)學(xué)習(xí) 目錄 ?前綴和 ?一維前綴和 ??一維前綴和模板: ?二維前綴和 ??二位前綴和模板: 前言: 算法學(xué)習(xí)筆記記錄日常分享,需要的看哈O(∩_∩)O,感謝大家的支持! 原i:a[1] a[2] a[3] …a[n] 前綴和:s[i]=a[1]+a[2]+…+a[i] s[0]=0(方便處理

    2024年02月08日
    瀏覽(22)
  • 【算法基礎(chǔ)】(一)基礎(chǔ)算法 --- 快速排序

    【算法基礎(chǔ)】(一)基礎(chǔ)算法 --- 快速排序

    ?個人主頁:bit me ?當(dāng)前專欄:算法基礎(chǔ) ??專欄簡介:該專欄主要更新一些基礎(chǔ)算法題,有參加藍橋杯等算法題競賽或者正在刷題的鐵汁們可以關(guān)注一下,互相監(jiān)督打卡學(xué)習(xí) ?? ?? ?? ? 題目要求: 給定你一個長度為n的整數(shù)數(shù)列 請你使用快速排序?qū)@個數(shù)列按照從小到大

    2023年04月14日
    瀏覽(19)
  • 【算法基礎(chǔ)】(一)基礎(chǔ)算法 --- 歸并排序

    【算法基礎(chǔ)】(一)基礎(chǔ)算法 --- 歸并排序

    ?個人主頁:bit me ?當(dāng)前專欄:算法基礎(chǔ) ??專欄簡介:該專欄主要更新一些基礎(chǔ)算法題,有參加藍橋杯等算法題競賽或者正在刷題的鐵汁們可以關(guān)注一下?? ?? ?? ? 題目要求: 給定你一個長度為 n 的整數(shù)數(shù)列。 ? 請你使用歸并排序?qū)@個數(shù)列按照從小到大進行排序。 ?

    2024年01月21日
    瀏覽(18)
  • 算法基礎(chǔ)15 —— 分治算法(歸并排序 + 快速排序)

    算法基礎(chǔ)15 —— 分治算法(歸并排序 + 快速排序)

    分治法的基本概念、思想 分治法是一種很重要的算法。 字面解釋,分治分治,分而治之。就是把一個復(fù)雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題……直到最后子問題可以簡單的直接求解,原問題的解即子問題的解的合并。 不難發(fā)現(xiàn),分

    2024年02月03日
    瀏覽(22)
  • 排序算法筆記-快速排序

    排序算法筆記-快速排序

    快速排序:確定分界數(shù),左邊小于分界,右邊大于分界數(shù),通過遞歸來不斷重置分界數(shù)劃分區(qū)域,直至完成排序 最優(yōu) n*logn 最差 n^2 原地排序,所以空間復(fù)雜度是 O(1) 細節(jié)不在闡述,自己理解一下 力扣912. 排序數(shù)組 套用模版,完美解決 力扣215 數(shù)組中的第K個最大元素 題中要求

    2024年02月16日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包