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

【數(shù)據(jù)結(jié)構(gòu) — 排序 — 插入排序】

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

一.排序

1.1.排序的概念及其運(yùn)用

1.1.1排序的概念

排序: 所謂排序,就是使一串記錄,按照其中的某個(gè)或某些關(guān)鍵字的大小,遞增或遞減的排列起來的操作。
穩(wěn)定性: 假定在待排序的記錄序列中,存在多個(gè)具有相同的關(guān)鍵字的記錄,若經(jīng)過排序,這些記錄的相對(duì)次序保持不變,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,則稱這種排序算法是穩(wěn)定的;否則稱為不穩(wěn)定的。
內(nèi)部排序: 數(shù)據(jù)元素全部放在內(nèi)存中的排序。
外部排序: 數(shù)據(jù)元素太多不能同時(shí)放在內(nèi)存中,根據(jù)排序過程的要求不能在內(nèi)外存之間移動(dòng)數(shù)據(jù)的排序。

1.1.2排序運(yùn)用

【數(shù)據(jù)結(jié)構(gòu) — 排序 — 插入排序】,C語言,# 數(shù)據(jù)結(jié)構(gòu),## 排序,數(shù)據(jù)結(jié)構(gòu),排序算法,算法,c語言
【數(shù)據(jù)結(jié)構(gòu) — 排序 — 插入排序】,C語言,# 數(shù)據(jù)結(jié)構(gòu),## 排序,數(shù)據(jù)結(jié)構(gòu),排序算法,算法,c語言

1.1.3 常見的排序算法

【數(shù)據(jù)結(jié)構(gòu) — 排序 — 插入排序】,C語言,# 數(shù)據(jù)結(jié)構(gòu),## 排序,數(shù)據(jù)結(jié)構(gòu),排序算法,算法,c語言

二.插入排序

2.1.直接插入排序

2.1.1.算法講解

直接插入排序是一種簡(jiǎn)單的插入排序法,其基本思想是:
把待排序的記錄按其關(guān)鍵碼值的大小逐個(gè)插入到一個(gè)已經(jīng)排好序的有序序列中,直到所有的記錄插入完為止,得到一個(gè)新的有序序列 。
實(shí)際中我們玩撲克牌時(shí),就用了插入排序的思想
【數(shù)據(jù)結(jié)構(gòu) — 排序 — 插入排序】,C語言,# 數(shù)據(jù)結(jié)構(gòu),## 排序,數(shù)據(jù)結(jié)構(gòu),排序算法,算法,c語言

當(dāng)插入第i(i>=1)個(gè)元素時(shí),前面的array[0],array[1],…,array[i-1]已經(jīng)排好序,此時(shí)用array[i]的排序碼與array[i-1],array[i-2],…的排序碼順序進(jìn)行比較,找到插入位置即將array[i]插入,原來位置上的元素順序后移

【數(shù)據(jù)結(jié)構(gòu) — 排序 — 插入排序】,C語言,# 數(shù)據(jù)結(jié)構(gòu),## 排序,數(shù)據(jù)結(jié)構(gòu),排序算法,算法,c語言

直接插入排序的特性總結(jié):

  1. 元素集合越接近有序,直接插入排序算法的時(shí)間效率越高
  2. 時(shí)間復(fù)雜度:O(N^2)
  3. 空間復(fù)雜度:O(1),它是一種穩(wěn)定的排序算法
  4. 穩(wěn)定性:穩(wěn)定

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

2.1.2.1.函數(shù)定義
Sort.h
#pragma once

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



//打印
void PrintArray(int* a, int n);
//插入排序
void InsertSort(int* a, int n);
2.1.2.2.算法接口實(shí)現(xiàn)
Sort.c
#include"Sort.h"

//打印
void PrintArray(int* a, int n)
{
	for (int i = 0; i < n; i++)
	{
		printf("%d ", a[i]);
	}
	printf("\n");
}
//直接插入排序
void InsertSort(int* a, int n)
{
	for (int i = 0; i < n-1; i++)
	{
		int end = i;
		int tmp = a[end + 1];
		while (end >= 0)
		{
			if (tmp < a[end])
			{
				a[end + 1] = a[end];
				end--;
			}
			else
			{
				break;
			}
		}
		a[end + 1] = tmp;
	}
}
2.1.2.3.測(cè)試代碼實(shí)現(xiàn)
test.c
#include"Sort.h"

void TestInsertSort()
{
	int a[] = { 2,4,5,7,8,0,9,6,3,1 };
	printf("排序前:");
	PrintArray(a, sizeof(a) / sizeof(int));
	printf("\n");
	printf("直接插入排序:");
	InsertSort(a, sizeof(a) / sizeof(int));
	PrintArray(a, sizeof(a) / sizeof(int));
}

int main()
{
	TestInsertSort();
	return 0;
}
2.1.2.4.測(cè)試展示

【數(shù)據(jù)結(jié)構(gòu) — 排序 — 插入排序】,C語言,# 數(shù)據(jù)結(jié)構(gòu),## 排序,數(shù)據(jù)結(jié)構(gòu),排序算法,算法,c語言

2.2.希爾排序

2.2.1.算法講解

希爾排序法又稱縮小增量法。希爾排序法的基本思想是:先選定一個(gè)整數(shù),把待排序文件中所有記錄分成個(gè)組,所有距離為的記錄分在同一組內(nèi),并對(duì)每一組內(nèi)的記錄進(jìn)行排序。然后,取,重復(fù)上述分組和排序的工作。當(dāng)?shù)竭_(dá)=1時(shí),所有記錄在統(tǒng)一組內(nèi)排好序。

【數(shù)據(jù)結(jié)構(gòu) — 排序 — 插入排序】,C語言,# 數(shù)據(jù)結(jié)構(gòu),## 排序,數(shù)據(jù)結(jié)構(gòu),排序算法,算法,c語言

希爾排序的特性總結(jié):

  1. 希爾排序是對(duì)直接插入排序的優(yōu)化。
  2. 當(dāng)gap > 1時(shí)都是預(yù)排序,目的是讓數(shù)組更接近于有序。當(dāng)gap == 1時(shí),數(shù)組已經(jīng)接近有序的了,這樣就會(huì)很快。這樣整體而言,可以達(dá)到優(yōu)化的效果。我們實(shí)現(xiàn)后可以進(jìn)行性能測(cè)試的對(duì)比。
  3. 希爾排序的時(shí)間復(fù)雜度不好計(jì)算,因?yàn)間ap的取值方法很多,導(dǎo)致很難去計(jì)算,因此在好些樹中給出的希爾排序的時(shí)間復(fù)雜度都不固定:
    數(shù)據(jù)結(jié)構(gòu)(C語言版)》— 嚴(yán)蔚敏
    【數(shù)據(jù)結(jié)構(gòu) — 排序 — 插入排序】,C語言,# 數(shù)據(jù)結(jié)構(gòu),## 排序,數(shù)據(jù)結(jié)構(gòu),排序算法,算法,c語言
    《數(shù)據(jù)結(jié)構(gòu)-用面相對(duì)象方法與C++描述》— 殷人昆
    【數(shù)據(jù)結(jié)構(gòu) — 排序 — 插入排序】,C語言,# 數(shù)據(jù)結(jié)構(gòu),## 排序,數(shù)據(jù)結(jié)構(gòu),排序算法,算法,c語言
    【數(shù)據(jù)結(jié)構(gòu) — 排序 — 插入排序】,C語言,# 數(shù)據(jù)結(jié)構(gòu),## 排序,數(shù)據(jù)結(jié)構(gòu),排序算法,算法,c語言
  4. 穩(wěn)定性:不穩(wěn)定

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

2.2.2.1.函數(shù)定義
Sort.h
#pragma once

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

//打印
void PrintArray(int* a, int n);
//希爾排序
void ShellSort(int* a, int n);
2.2.2.2.算法接口實(shí)現(xiàn)
Sort.c
#include"Sort.h"

//打印
void PrintArray(int* a, int n)
{
	for (int i = 0; i < n; i++)
	{
		printf("%d ", a[i]);
	}
	printf("\n");
}
//希爾排序
void ShellSort(int* a, int n)
{
	int gap = n;
	while (gap > 1)
	{
		gap = gap / 3 + 1;
		for (int i = 0; i < n - gap; i++)
		{
			int end = i;
			int tmp = a[end + gap];
			while (end >= 0)
			{
				if (tmp < a[end])
				{
					a[end + gap] = a[end];
					end -= gap;
				}
				else
				{
					break;
				}
			}
			a[end + gap] = tmp;
		}
	}
}
2.2.2.3.測(cè)試代碼實(shí)現(xiàn)
test.c
#include"Sort.h"


void TestShellSort()
{
	int a[] = { 2,4,5,7,8,0,9,6,3,1 };
	printf("排序前:");
	PrintArray(a, sizeof(a) / sizeof(int));
	printf("\n");
	printf("希爾排序:");
	ShellSort(a, sizeof(a) / sizeof(int));
	PrintArray(a, sizeof(a) / sizeof(int));
}

int main()
{
	TestShellSort();
	return 0;
}
2.2.2.4.測(cè)試展示

【數(shù)據(jù)結(jié)構(gòu) — 排序 — 插入排序】,C語言,# 數(shù)據(jù)結(jié)構(gòu),## 排序,數(shù)據(jù)結(jié)構(gòu),排序算法,算法,c語言文章來源地址http://www.zghlxwxcb.cn/news/detail-754964.html

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

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(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)與算法:插入排序&希爾排序

    假設(shè)現(xiàn)在你有一個(gè)有序的數(shù)組,你要把一個(gè)數(shù)據(jù)插入到數(shù)組中,保證插入后依然有序,要怎么做? 對(duì)于人來說,這個(gè)問題就像是在整理撲克牌,瞄一眼就知道應(yīng)該插入什么位置。但是對(duì)于程序來說,就需要一一對(duì)比,直到找到一個(gè)位置 左邊比它大,右邊比它小 ,就算找到了

    2024年01月17日
    瀏覽(38)
  • 【數(shù)據(jù)結(jié)構(gòu)】常見排序算法——常見排序介紹、插入排序、直接插入排序、希爾排序

    【數(shù)據(jù)結(jié)構(gòu)】常見排序算法——常見排序介紹、插入排序、直接插入排序、希爾排序

    ??在計(jì)算機(jī)科學(xué)中,排序是將一組數(shù)據(jù)按照指定的順序排列的過程。排序算法由于執(zhí)行效率的不同可以分為多種不同的算法。 ??通常情況下,排序算法可以分為兩類,即 內(nèi)部排序和外部排序 。內(nèi)部排序是指數(shù)據(jù)全部加載到內(nèi)存中進(jìn)行排序,適用于數(shù)據(jù)量較小的情況,而

    2024年02月08日
    瀏覽(34)
  • 數(shù)據(jù)結(jié)構(gòu)算法--2 冒泡排序,選擇排序,插入排序

    數(shù)據(jù)結(jié)構(gòu)算法--2 冒泡排序,選擇排序,插入排序

    思想就是將相鄰元素兩兩比較,當(dāng)一個(gè)元素大于右側(cè)相鄰元素時(shí),交換他們的位置,小于右側(cè)元素時(shí),位置不變,最終序列中的最大元素,像氣泡一樣,到了最右側(cè)。 這時(shí)冒泡排序第一輪結(jié)束,數(shù)列最右側(cè)元素9的位置可認(rèn)為是一個(gè)有序區(qū),有序區(qū)目前有一個(gè)元素. 第二輪排序

    2024年02月13日
    瀏覽(91)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】排序算法(選擇排序,冒泡排序,插入排序,希爾排序)

    基本概念這了就不浪費(fèi)時(shí)間解釋了,這四種都是很簡(jiǎn)單的排序方式,本專欄后續(xù)文章會(huì)出歸并排序,計(jì)數(shù)排序,快速排序,堆排序,桶排序等排序算法,今天這篇文章中給出選擇排序,冒泡排序,插入排序和希爾排序的實(shí)現(xiàn); 如果發(fā)現(xiàn)文章中有錯(cuò)誤,還請(qǐng)大家指出來,我會(huì)非

    2024年02月15日
    瀏覽(97)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】:插入排序與希爾排序

    【數(shù)據(jù)結(jié)構(gòu)與算法】:插入排序與希爾排序

    ?? 個(gè)人主頁 : Quitecoder ?? 專欄 : 數(shù)據(jù)結(jié)構(gòu)與算法 歡迎大家來到初階數(shù)據(jù)結(jié)構(gòu)的最后一小節(jié):排序 排序是一種將一組對(duì)象按照某種特定順序重新排列的過程。在計(jì)算機(jī)科學(xué)中,排序是數(shù)據(jù)處理中非?;厩抑匾牟僮?,它可以幫助人們更有效地理解和分析數(shù)據(jù)。排序的順序

    2024年03月18日
    瀏覽(29)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】插入排序和希爾排序

    【數(shù)據(jù)結(jié)構(gòu)與算法】插入排序和希爾排序

    ? 目錄 一.插入排序? InsertSort 基本思想 動(dòng)圖演示 ?特性總結(jié) 二.希爾排序? ShellSort 基本思想 圖例 特性總結(jié) 基本思想 把待排序的記錄按其關(guān)鍵碼值的大小逐個(gè)插入到一個(gè)已經(jīng)排好序的有序序列中,直到所有的記錄插入完為止,得到一個(gè)新的有序序列 。 當(dāng)插入第i(i=1)個(gè)元素

    2023年04月18日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】直接插入排序和希爾排序

    【數(shù)據(jù)結(jié)構(gòu)與算法】直接插入排序和希爾排序

    進(jìn)入了初階數(shù)據(jù)結(jié)構(gòu)的一個(gè)新的主題——排序。所謂排序,就是一串記錄, 按照其中的某幾個(gè)或某些的大?。ㄒ欢ǖ囊?guī)則) , 遞增或遞減排列起來的操作 。 排序的 穩(wěn)定性 :在一定的規(guī)則下,兩個(gè)值相等的元素,在排序算法處理前后的相對(duì)位置是否發(fā)生變化,如果相

    2024年04月13日
    瀏覽(61)
  • 【數(shù)據(jù)結(jié)構(gòu)】排序算法(一)—>插入排序、希爾排序、選擇排序、堆排序

    【數(shù)據(jù)結(jié)構(gòu)】排序算法(一)—>插入排序、希爾排序、選擇排序、堆排序

    ?? 樊梓慕: 個(gè)人主頁 ? ?? 個(gè)人專欄: 《C語言》《數(shù)據(jù)結(jié)構(gòu)》《藍(lán)橋杯試題》《LeetCode刷題筆記》《實(shí)訓(xùn)項(xiàng)目》 ?? 每一個(gè)不曾起舞的日子,都是對(duì)生命的辜負(fù) 目錄 前言 1.直接插入排序 2.希爾排序 3.直接選擇排序 4.堆排序 本篇文章博主將介紹排序算法中的插入排序:直接

    2024年02月08日
    瀏覽(19)
  • 『初階數(shù)據(jù)結(jié)構(gòu) ? C語言』⑥ - 插入排序&希爾排序

    『初階數(shù)據(jù)結(jié)構(gòu) ? C語言』⑥ - 插入排序&希爾排序

    學(xué)習(xí)目標(biāo) 寫在前面 1.插入排序 2.插入排序?qū)崙?zhàn)? 3.插入排序的實(shí)現(xiàn)? 4.插入排序的效率 5.平均情況 6.希爾排序 7.希爾排序的實(shí)現(xiàn) 8.希爾排序的效率 9.總結(jié) ? 之前我們衡量一個(gè)算法的效率時(shí),都是著眼于它在最壞情況下需要多少步。原因很簡(jiǎn)單,連最壞的情況都做足準(zhǔn)備了,其

    2024年02月15日
    瀏覽(26)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法篇】手撕排序算法之插入排序與希爾排序

    【數(shù)據(jù)結(jié)構(gòu)與算法篇】手撕排序算法之插入排序與希爾排序

    ???內(nèi)容專欄:《數(shù)據(jù)結(jié)構(gòu)與算法篇》 ??本文概括: 講述排序的概念、直接插入排序、希爾排序、插入排序和希爾排序的區(qū)別。 ??本文作者:花 碟 ??發(fā)布時(shí)間:2023.6.13 排序 :所謂排序,就是使一串記錄,按照其中的某個(gè)或某些的大小,遞增或遞減的排列起來的

    2024年02月09日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包