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

數(shù)據(jù)結(jié)構(gòu)第十一彈---堆

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)第十一彈---堆。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1、堆的概念及結(jié)構(gòu)

堆就是以二叉樹的順序存儲方式來存儲元素,同時(shí)又要滿足父親結(jié)點(diǎn)存儲數(shù)據(jù)都要大于等于兒子結(jié)點(diǎn)存儲數(shù)據(jù)(也可以是父親結(jié)點(diǎn)數(shù)據(jù)都要小于等于兒子結(jié)點(diǎn)數(shù)據(jù))的一種數(shù)據(jù)結(jié)構(gòu)。堆只有兩種即大堆和小堆,大堆就是父親結(jié)點(diǎn)數(shù)據(jù)大于等于兒子結(jié)點(diǎn)數(shù)據(jù),小堆則反之。

數(shù)據(jù)結(jié)構(gòu)第十一彈---堆,數(shù)據(jù)結(jié)構(gòu),c語言,算法

2、堆的性質(zhì)

堆中某個節(jié)點(diǎn)的值總是不大于或不小于其父節(jié)點(diǎn)的值;
堆總是一棵完全二叉樹。

3、堆的調(diào)整算法

3.1、向下調(diào)整算法

現(xiàn)在我們給出一個數(shù)組,邏輯上看作一棵完全二叉樹。我們通過從根節(jié)點(diǎn)開始的向下調(diào)整算法可以把它調(diào)整成一個小堆。

數(shù)據(jù)結(jié)構(gòu)第十一彈---堆,數(shù)據(jù)結(jié)構(gòu),c語言,算法
但是,使用向下調(diào)整算法需要滿足一個前提:
?若想將其調(diào)整為小堆,那么根結(jié)點(diǎn)的左右子樹必須都為小堆。
?若想將其調(diào)整為大堆,那么根結(jié)點(diǎn)的左右子樹必須都為大堆。

?
?數(shù)據(jù)結(jié)構(gòu)第十一彈---堆,數(shù)據(jù)結(jié)構(gòu),c語言,算法

向下調(diào)整算法的基本思想(小堆):
?1.從根結(jié)點(diǎn)處開始,選出左右孩子中值較小的孩子。
?2.讓小的孩子與其父親進(jìn)行比較。
?若小的孩子比父親還小,則該孩子與其父親的位置進(jìn)行交換。并將原來小的孩子的位置當(dāng)成父親繼續(xù)向下進(jìn)行調(diào)整,直到調(diào)整到葉子結(jié)點(diǎn)為止。
?若小的孩子比父親大,則不需處理了,調(diào)整完成,整個樹已經(jīng)是小堆了。

代碼實(shí)現(xiàn)

void Swap(HPDataType* a, HPDataType* b)
{
	HPDataType tmp = *a;
	*a = *b;
	*b = tmp;
}
void AdjustDown(HPDataType* a, int size, int parent)
{
	//1.假設(shè)左孩子為小的數(shù)據(jù)
	int child = parent * 2 + 1;
	while (child < size)
	{
	//2.如果左孩子>右孩子 則將右孩子賦值
	//有可能只有左孩子 所以加條件
	//以下未有左右孩子且左孩子>右孩子情況,則將child++
		if (child + 1 < size && a[child] > a[child + 1])
		{
			child++;
		}
		//3.將孩子與父親進(jìn)行比較 如果孩子小則交換
		//然后將父親和孩子移動到下一個位置
		if (a[child] < a[parent])
		{
			Swap(&a[child], &a[parent]);
			parent = child;
			child = parent * 2 + 1;
		}
		else
		{
			break;
		}
	}
}

交換數(shù)值函數(shù)注意
數(shù)據(jù)結(jié)構(gòu)第十一彈---堆,數(shù)據(jù)結(jié)構(gòu),c語言,算法
使用堆的向下調(diào)整算法需要滿足其根結(jié)點(diǎn)的左右子樹均為大堆或是小堆才行,那么如何才能將一個任意樹調(diào)整為堆呢?
?答案很簡單,我們只需要從倒數(shù)第一個非葉子結(jié)點(diǎn)開始,從后往前,按下標(biāo),依次作為根去向下調(diào)整即可。
?數(shù)據(jù)結(jié)構(gòu)第十一彈---堆,數(shù)據(jù)結(jié)構(gòu),c語言,算法

向下調(diào)整算法的時(shí)間復(fù)雜度:
數(shù)據(jù)結(jié)構(gòu)第十一彈---堆,數(shù)據(jù)結(jié)構(gòu),c語言,算法

根據(jù)計(jì)算可知,向下調(diào)整算法的時(shí)間復(fù)雜度為O(N)。

3.2、向上調(diào)整算法

當(dāng)我們在一個堆的末尾插入一個數(shù)據(jù)后,需要對堆進(jìn)行調(diào)整,使其仍然是一個堆,這時(shí)需要用到堆的向上調(diào)整算法。

數(shù)據(jù)結(jié)構(gòu)第十一彈---堆,數(shù)據(jù)結(jié)構(gòu),c語言,算法

向上調(diào)整算法的基本思想(小堆):
?1.將目標(biāo)結(jié)點(diǎn)與其父結(jié)點(diǎn)比較。
?2.若目標(biāo)結(jié)點(diǎn)的值比其父結(jié)點(diǎn)的值小,則交換目標(biāo)結(jié)點(diǎn)與其父結(jié)點(diǎn)的位置,并將原目標(biāo)結(jié)點(diǎn)的父結(jié)點(diǎn)當(dāng)作新的目標(biāo)結(jié)點(diǎn)繼續(xù)進(jìn)行向上調(diào)整。若目標(biāo)結(jié)點(diǎn)的值比其父結(jié)點(diǎn)的值大,則停止向上調(diào)整,此時(shí)該樹已經(jīng)是小堆了。

數(shù)據(jù)結(jié)構(gòu)第十一彈---堆,數(shù)據(jù)結(jié)構(gòu),c語言,算法

但是,使用向上調(diào)整算法需要滿足一個前提:
?若想將其調(diào)整為小堆,那么原來的數(shù)據(jù)為小堆。
?若想將其調(diào)整為大堆,那么原來的數(shù)據(jù)為大堆。

?
?代碼實(shí)現(xiàn)

void Swap(HPDataType* a, HPDataType* b)
{
	HPDataType tmp = *a;
	*a = *b;
	*b = tmp;
}
void AdjustUp(HPDataType* p, int child)
{
	int parent = (child - 1) / 2;
	while (child > 0)
	{
		if (p[parent] > p[child])
		{
			Swap(&p[parent], &p[child]);
			child = parent;
			parent = (parent - 1) / 2;
		}
		else
		{
			break;
		}
	}
}

向上調(diào)整算法時(shí)間復(fù)雜度
數(shù)據(jù)結(jié)構(gòu)第十一彈---堆,數(shù)據(jù)結(jié)構(gòu),c語言,算法

因此向上調(diào)整算法的時(shí)間復(fù)雜度為O(N*logN)。

4、堆的實(shí)現(xiàn)

實(shí)現(xiàn)一個數(shù)據(jù)結(jié)構(gòu)的第一步需要創(chuàng)建一個工程。(下圖為vs 2022)
數(shù)據(jù)結(jié)構(gòu)第十一彈---堆,數(shù)據(jù)結(jié)構(gòu),c語言,算法
Heap.h(堆的類型定義、接口函數(shù)聲明、引用的頭文件)
Heap.c(堆接口函數(shù)的實(shí)現(xiàn))
test.c (主函數(shù)、測試順序表各個接口功能)

4.1、頭文件包含和結(jié)構(gòu)定義

以下是實(shí)現(xiàn)堆可能用到的頭文件。

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>

堆的結(jié)構(gòu)定義

typedef int HPDataType;
typedef struct Heap
{
	HPDataType* a;//存放數(shù)據(jù)的動態(tài)數(shù)組
	int size;     //有效數(shù)據(jù)個數(shù)
	int capacity; //數(shù)組容量
}HP;

4.2、初始化

void HeapInit(HP* php)
{
	assert(php);//斷言避免出現(xiàn)空指針
	php->a = NULL;
	php->capacity = php->size = 0;
}

4.3、銷毀

void HeapDestory(HP* php)
{
	assert(php);
	free(php->a);//釋放動態(tài)數(shù)組
	php->size = php->capacity = 0;
}

4.4、插入數(shù)據(jù)

插入數(shù)據(jù)的同時(shí)需要保證插入之后的數(shù)據(jù)依然是堆,由于插入數(shù)據(jù)之前的所有數(shù)據(jù)是堆,可以使用向上調(diào)整數(shù)據(jù)進(jìn)行調(diào)整。
數(shù)據(jù)結(jié)構(gòu)第十一彈---堆,數(shù)據(jù)結(jié)構(gòu),c語言,算法

void HeapPush(HP* php, HPDataType x)
{
	assert(php);
	//1.檢查容量
	if (php->size == php->capacity)
	{
		int newCapacity = php->capacity == 0 ? 4 : 2 * php->capacity;
		HPDataType* tmp = (HPDataType*)realloc(php->a, sizeof(HPDataType)*newCapacity);
		if (tmp == NULL)
		{
			perror("realloc fail");
			exit(-1);
		}
		php->a = tmp;
		php->capacity = newCapacity;
	}
	//2.插入數(shù)據(jù)
	php->a[php->size] = x;
	php->size++;

	//3.調(diào)整數(shù)據(jù)
	AdjustUp(php->a, php->size-1);
}

測試
數(shù)據(jù)結(jié)構(gòu)第十一彈---堆,數(shù)據(jù)結(jié)構(gòu),c語言,算法

4.5、刪除數(shù)據(jù) 刪除堆頂

刪除堆頂元素,首先需要有數(shù)據(jù),通過斷言判斷,有數(shù)據(jù)的情況下先將堆頂元素和數(shù)組尾的數(shù)據(jù)進(jìn)行交換,然后將size–,因?yàn)槌硕秧斣夭粷M足堆結(jié)構(gòu)之外,其他都滿足,所以使用向下調(diào)整數(shù)據(jù)算法。

void HeapPop(HP* php)
{
	assert(php);
	//有數(shù)據(jù)才刪除
	assert(php->size > 0);
	//1.將首位數(shù)據(jù)交換
	Swap(&php->a[0], &php->a[php->size - 1]);
	//2.刪除尾數(shù)據(jù)
	php->size--;
	//3.向下調(diào)整
	AdjustDown(php->a, php->size, 0);
}

測試
數(shù)據(jù)結(jié)構(gòu)第十一彈---堆,數(shù)據(jù)結(jié)構(gòu),c語言,算法

4.6、獲取堆頂元素

根據(jù)堆的定義可知,堆頂元素就是數(shù)組首元素,返回首元素即可。

HPDataType HeapTop(HP* php)
{
	assert(php);
	assert(php->size > 0);
	return php->a[0];
}

測試
數(shù)據(jù)結(jié)構(gòu)第十一彈---堆,數(shù)據(jù)結(jié)構(gòu),c語言,算法

4.7、獲取有效數(shù)據(jù)個數(shù)

根據(jù)堆的結(jié)構(gòu)設(shè)計(jì),size就是堆的有效數(shù)據(jù)個數(shù),返回size即可。

size_t HeapSize(HP* php)
{
	assert(php);
	return php->size;
}

測試
數(shù)據(jù)結(jié)構(gòu)第十一彈---堆,數(shù)據(jù)結(jié)構(gòu),c語言,算法

4.8、判斷是否為空

根據(jù)堆結(jié)構(gòu)的設(shè)計(jì),size代表堆的有效數(shù)據(jù)個數(shù),size等于0則為空,不等于0則不為空。

bool HeapEmpty(HP* php)
{
	assert(php);
	return php->size == 0;
}

數(shù)據(jù)結(jié)構(gòu)第十一彈---堆,數(shù)據(jù)結(jié)構(gòu),c語言,算法

5、代碼匯總

5.1、Heap.h

#pragma once     //防止頭文件重復(fù)包含
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>

typedef int HPDataType;
typedef struct Heap
{
	HPDataType* a;//存放數(shù)據(jù)的數(shù)組
	int size;     //有效數(shù)據(jù)個數(shù)
	int capacity; //數(shù)組容量
}HP;

//初始化
void HeapInit(HP* php);
//銷毀
void HeapDestory(HP* php);
//插入數(shù)據(jù)
void HeapPush(HP* php, HPDataType x);
//刪除數(shù)據(jù) 刪除堆頂數(shù)據(jù)
void HeapPop(HP* php);
//取堆頂元素
HPDataType HeapTop(HP* php);
//獲取有效數(shù)據(jù)個數(shù)
size_t HeapSize(HP* php);
//判斷是否為空
bool HeapEmpty(HP* php);
//兩個元素交換
void Swap(HPDataType* a, HPDataType* b);

//向上調(diào)整數(shù)據(jù) 小堆
void AdjustUp(HPDataType* p, int child);
//向下調(diào)整算法 小堆
void AdjustDown(HPDataType* a, int size, int parent);

5.2、Heap.c

#define _CRT_SECURE_NO_WARNINGS
#include "Heap.h"
//初始化 小堆
void HeapInit(HP* php)
{
	assert(php);
	php->a = NULL;
	php->capacity = php->size = 0;
}
//銷毀
void HeapDestory(HP* php)
{
	assert(php);
	free(php->a);
	php->size = php->capacity = 0;
}
void Swap(HPDataType* a, HPDataType* b)
{
	HPDataType tmp = *a;
	*a = *b;
	*b = tmp;
}
log N
//向上調(diào)整數(shù)據(jù) 小堆
void AdjustUp(HPDataType* p, int child)
{
	int parent = (child - 1) / 2;
	while (child > 0)
	{
		if (p[parent] > p[child])
		{
			Swap(&p[parent], &p[child]);
			child = parent;
			parent = (parent - 1) / 2;
		}
		else
		{
			break;
		}
	}
}


//插入數(shù)據(jù)
void HeapPush(HP* php, HPDataType x)
{
	assert(php);
	//1.檢查容量
	if (php->size == php->capacity)
	{
		int newCapacity = php->capacity == 0 ? 4 : 2 * php->capacity;
		HPDataType* tmp = (HPDataType*)realloc(php->a, sizeof(HPDataType)*newCapacity);
		if (tmp == NULL)
		{
			perror("realloc fail");
			exit(-1);
		}
		php->a = tmp;
		php->capacity = newCapacity;
	}
	//2.插入數(shù)據(jù)
	php->a[php->size] = x;
	php->size++;

	//3.調(diào)整數(shù)據(jù)
	AdjustUp(php->a, php->size-1);
}

//向下調(diào)整算法 小堆
void AdjustDown(HPDataType* a, int size, int parent)
{
	//1.假設(shè)左孩子為小的數(shù)據(jù)
	int child = parent * 2 + 1;
	while (child < size)
	{
	//2.如果左孩子>右孩子 則將右孩子賦值
	//有可能只有左孩子 所以加條件
	//以下未有左右孩子且左孩子>右孩子情況,則將child++
		if (child + 1 < size && a[child] > a[child + 1])
		{
			child++;
		}
		//3.將孩子與父親進(jìn)行比較 如果孩子小則交換
		//然后將父親和孩子移動到下一個位置
		if (a[child] < a[parent])
		{
			Swap(&a[child], &a[parent]);
			parent = child;
			child = parent * 2 + 1;
		}
		else
		{
			break;
		}
	}
}


//刪除數(shù)據(jù) 刪除堆頂數(shù)據(jù)
void HeapPop(HP* php)
{
	assert(php);
	//有數(shù)據(jù)才刪除
	assert(php->size > 0);
	//1.將首位數(shù)據(jù)交換
	Swap(&php->a[0], &php->a[php->size - 1]);
	//2.刪除尾數(shù)據(jù)
	php->size--;
	//3.向下調(diào)整
	AdjustDown(php->a, php->size, 0);
}
//取堆頂元素
HPDataType HeapTop(HP* php)
{
	assert(php);
	assert(php->size > 0);
	return php->a[0];
}
size_t HeapSize(HP* php)
{
	assert(php);
	return php->size;
}
bool HeapEmpty(HP* php)
{
	assert(php);
	return php->size == 0;
}

總結(jié)

本篇博客就結(jié)束啦,謝謝大家的觀看,如果公主少年們有好的建議可以留言喔,謝謝大家啦!文章來源地址http://www.zghlxwxcb.cn/news/detail-778666.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)第十一彈---堆的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)與算法(十一) 排序算法一

    數(shù)據(jù)結(jié)構(gòu)與算法(十一) 排序算法一

    int nArray[] = { 8,5,3,2,7 };如下一個數(shù)組,現(xiàn)對其進(jìn)行從小到大排序 選擇排序:將小的依次放在前面 具象化如下: void swap(int *nSValue,int *nDValue) 交換函數(shù)? { ????int nTempValue = 0; ????nTempValue = *nSValue; ????*nSValue = *nDValue; ????*nDValue = nTempValue; } void selectSort(int *pArr, int nCount) 選

    2024年01月20日
    瀏覽(17)
  • JAVAEE初階相關(guān)內(nèi)容第十一彈--多線程(進(jìn)階)

    JAVAEE初階相關(guān)內(nèi)容第十一彈--多線程(進(jìn)階)

    目錄 一、常見的鎖策略 1樂觀鎖VS悲觀鎖 1.1樂觀鎖 1.2悲觀鎖 2.輕量級鎖VS重量級鎖 2.1輕量級鎖 2.2重量級鎖 3.自旋鎖VS掛起等待鎖 3.1自旋鎖 3.2掛起等待鎖 4.互斥鎖VS讀寫鎖 4.1互斥鎖 4.2讀寫鎖 5.公平鎖VS非公平鎖 5.1公平鎖 5.2非公平鎖 6.可重入鎖VS不可重入鎖 6.1可重入鎖 6.2不可

    2024年02月07日
    瀏覽(18)
  • 數(shù)據(jù)結(jié)構(gòu)與算法十一 圖的入門

    數(shù)據(jù)結(jié)構(gòu)與算法十一 圖的入門

    在現(xiàn)實(shí)生活中,有許多應(yīng)用場景會包含很多點(diǎn)以及點(diǎn)點(diǎn)之間的連接,而這些應(yīng)用場景我們都可以用即將要學(xué)習(xí)的圖這種數(shù)據(jù)結(jié)構(gòu)去解決。 地圖: 我們生活中經(jīng)常使用的地圖,基本上是由城市以及連接城市的道路組成,如果我們把城市看做是一個一個的點(diǎn),把道路看做是一條

    2024年02月04日
    瀏覽(27)
  • 數(shù)據(jù)結(jié)構(gòu)作業(yè)—第十三周---- Prim算法 Kruskal算法 Dijkstra算法

    數(shù)據(jù)結(jié)構(gòu)作業(yè)—第十三周---- Prim算法 Kruskal算法 Dijkstra算法

    (只看點(diǎn),不看邊,適合邊較多的圖,即 稠密圖 ) ? ? ? 是一種按權(quán)值的遞增次序選擇合適的邊來構(gòu)造最小生成樹的方法;( 稀疏圖 ) 適合帶權(quán)有向圖和帶權(quán)無向圖求單源最短路徑; 不適合含負(fù)取值的圖,求最短路徑; 1 .?單選題?簡單?7分 對于有n個頂點(diǎn)的帶權(quán)連通圖

    2024年02月15日
    瀏覽(22)
  • 【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第十篇】動態(tài)規(guī)劃

    【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第十篇】動態(tài)規(guī)劃

    目錄 前言: 動態(tài)規(guī)劃: 常見應(yīng)用: 解題步驟: ?動態(tài)規(guī)劃的簡化步驟: 案例: 509. 斐波那契數(shù) - 力扣(LeetCode) 70. 爬樓梯 - 力扣(LeetCode) 62. 不同路徑 - 力扣(LeetCode) 總結(jié): ? ? ? ? 本文我們將為大家講解一下動態(tài)規(guī)劃的理論知識,并且會講解幾道力扣的經(jīng)典例題。

    2024年02月11日
    瀏覽(30)
  • 深入理解數(shù)據(jù)結(jié)構(gòu)第一彈——二叉樹(1)——堆

    深入理解數(shù)據(jù)結(jié)構(gòu)第一彈——二叉樹(1)——堆

    前言: 在前面我們已經(jīng)學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)操作:順序表和鏈表及其相關(guān)內(nèi)容,今天我們來學(xué)一點(diǎn)有些難度的知識—— 數(shù)據(jù)結(jié)構(gòu)中的二叉樹 ,今天我們先來學(xué)習(xí) 二叉樹中堆 的知識,這部分內(nèi)容還是非常有意思的,下面我們就開始慢慢學(xué)習(xí) 準(zhǔn)備工作:本人習(xí)慣將文件放在

    2024年04月17日
    瀏覽(28)
  • 【數(shù)據(jù)結(jié)構(gòu)入門精講 | 第十七篇】一文講清圖及各類圖算法

    【數(shù)據(jù)結(jié)構(gòu)入門精講 | 第十七篇】一文講清圖及各類圖算法

    在上一篇中我們進(jìn)行了的并查集相關(guān)練習(xí),在這一篇中我們將學(xué)習(xí)圖的知識點(diǎn)。 下面介紹幾種在對圖操作時(shí)常用的算法。 深度優(yōu)先搜索(DFS)是一種用于遍歷或搜索樹、圖等數(shù)據(jù)結(jié)構(gòu)的基本算法。該算法從給定的起點(diǎn)開始,沿著一條路徑直到達(dá)到最深的節(jié)點(diǎn),然后再回溯到

    2024年02月03日
    瀏覽(18)
  • 【夜深人靜學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法 | 第十二篇】動態(tài)規(guī)劃——背包問題

    【夜深人靜學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法 | 第十二篇】動態(tài)規(guī)劃——背包問題

    ? 目錄 ?前言: ?01背包問題: 二維數(shù)組思路: 一維數(shù)組思路: 總結(jié): ? ? ? 在前面我們學(xué)習(xí)動態(tài)規(guī)劃理論知識的時(shí)候,我就講過要介紹一下背包問題,那么今天我們就來講解一下背包問題。 在這里我們只介紹 01背包 ,至于分組背包和混合背包這種的已經(jīng)屬于競賽級別的

    2024年02月12日
    瀏覽(19)
  • 數(shù)據(jù)結(jié)構(gòu):二叉樹經(jīng)典例題(單選題)-->你真的掌握二叉樹了嗎?(第一彈)

    數(shù)據(jù)結(jié)構(gòu):二叉樹經(jīng)典例題(單選題)-->你真的掌握二叉樹了嗎?(第一彈)

    朋友們、伙計(jì)們,我們又見面了,本期來給大家解讀一下有關(guān)二叉樹的經(jīng)典例題,如果看完之后對你有一定的啟發(fā),那么請留下你的三連,祝大家心想事成! C 語 言 專 欄: C語言:從入門到精通 數(shù)據(jù)結(jié)構(gòu)專欄: 數(shù)據(jù)結(jié)構(gòu) 個? 人? 主? 頁?: stackY、 目錄 前言: 一、 二、

    2024年02月10日
    瀏覽(24)
  • C語言數(shù)據(jù)結(jié)構(gòu)與算法

    冒泡排序 例題 順序表下的 冒泡排序 注意:冒泡排序 穩(wěn)定,最多執(zhí)行n(n-1)/2次 選擇排序不穩(wěn)定,平均比較次數(shù)n(n-1)/2 直接插入排序,是在有序基礎(chǔ)上,速度最快且穩(wěn)定的排序方法。 希爾排序是 不穩(wěn)定的 順序查找 二分查找(非遞歸) 二分查找(遞歸) 數(shù)組 鏈表 查詢 快 慢

    2024年02月06日
    瀏覽(92)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包