排序概念以及插入排序

一、排序基本概念

1.就地排序:使用恒定的額外空間來產生輸出

就地排序只是在原數組空間進行排序處理,也就是輸入的數組和得到的數組是同一個

2.內部排序和外部排序:待排序數據可以一次性載入到內存中為內部排序,反之數據量過大就是外部排序

本科階段幾乎都是內部排序

3.穩定排序:排序前后序列中鍵值相等的元素在相對位置不發生變化的就是穩定排序

4.哪些排序是穩定和不穩定:

a.冒泡排序(Bubble sort),插入排序(Insrtion sort),歸并排序(Merge sort)和計數排序(Counting sort)等本身就具有穩定排序的特質

b.快速排序、堆排序等是不穩定排序

c.雖然很多算法本身具有穩定或不穩定排序性質但是任何排序只要稍作修改就可以修改穩定性,例如在冒泡排序中判斷交換順序的依據是if(a>b)只要變成if(a>=b)就可以破壞穩定性

二、插入排序

特點:

1,經過幾次排序后,前幾個元素就已經有序了,后序元素是否有序無關

2,怕新元素是前面已經有序元素的最小值

3.如果待排序的元素,已經有序,只有極個別的元素是無序,插入速度較快

4.如果元素是鏈式存儲,非常時候插入排序

三、代碼實現

1.頭文件中的接口

//
// Created by 27893 on 2025/8/9.
//#ifndef INSERTSORT_H
#define INSERTSORT_H
typedef struct {int key;void*data;
}Element;typedef struct {Element*data;int len;
}SortTable;void insertSort(SortTable*table);
#endif //INSERTSORT_H

2.算法的實現

//
// Created by 27893 on 2025/8/9.
//#include "InsertSort.h"void insertSort(SortTable *table) {//從第二個開始插入for (int i=1;i<table->len;i++) {if (table->data[i].key<table->data[i-1].key) {//用j來輔助查找元素的真正待插入位置int temp=table->data[i].key;int j=i-1;//只要待插入元素比j指向位置還小就往前while (j!=-1&&temp<table->data[j].key) {table->data[j+1].key=table->data[j].key;j--;}//否則結束插入到j的后一個位置table->data[j+1].key=temp;}}
}

四、希爾排序

1.希爾排序說明

在插入排序中,我們可能會遇到一個很小的數到很后面才發現,這樣就要和前面有序區的很多元素進行比較,時間復雜度接近O(n^2)

而希爾排序是將每次步長調大一點,剛開始一般為數組長度的一半,比如下面的表元素個數為10,我們第一次排序就拿當前元素與當前元素后面的第5個進行比較,這樣的比較進行5次

第二次我們步長為上次的一半,每次和自己后面的第2個進行比較,這樣的比較進行兩次

直到步長為0,結束我們的循環,這樣時間復雜度最多為O(nlog_2n)

2.希爾排序代碼

void shellSort(SortTable *table) {for (int gap=table->len/2;gap>0;gap/=2) {for (int i=gap;i<table->len;i++) {Element temp=table->data[i];int j;for (j=i;j>=gap&&temp.key<table->data[j-gap].key;j-=gap) {table->data[j]=table->data[j-gap];}table->data[j]=temp;}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/92436.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/92436.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/92436.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Webpack 核心配置與最佳實踐指南

Webpack 是現代前端工程化的核心工具,理解其配置原理和優化技巧對開發效率至關重要。 一、Webpack 基礎架構 1、核心概念關系圖 2、核心概念詳解 概念 作用 示例配置 Entry 應用入口起點 entry: ‘./src/index.js’ Output 編譯結果輸出位置 output.path: path.resolve(__d…

GISBox私有云+SaaS:安全協同的地理智能平臺

一、概述 GISBox&#xff08;GIS 工具箱&#xff09;是一套能夠對GIS 影像、地形、傾斜攝影進行場景編輯、切片轉化、分發服務的 GIS 工具箱。同時&#xff0c;GISBox還支持私有云并一鍵開啟SaaS服務。 二、什么是私有云&#xff1f; 私有云服務是一種為企業或組織量身定制的…

代理人工智能的隱藏威脅

代理型人工智能的自主性令人興奮&#xff0c;但事實并非如此。主動性越高&#xff0c;不可預測性就越強&#xff0c;這為嚴重的、往往被忽視的安全風險打開了大門。從指令劫持到數字供應鏈的連鎖故障&#xff0c;代理型人工智能不僅智能&#xff0c;而且在不受控制的情況下非常…

SonarQube 掃描多個微服務模塊

SonarQube 掃描多個微服務模塊 在使用 SonarQube/SonarCloud 掃描多個微服務模塊時&#xff0c;核心目標是??確保每個微服務模塊被獨立分析??&#xff0c;并在 SonarQube 界面中以獨立項目展示結果。以下是具體實現方案&#xff0c;分場景說明&#xff1a; ??一、前提條…

當前主流且經過市場驗證的開源 BI 系統推薦

以下是當前主流且經過市場驗證的開源 BI 系統推薦&#xff0c;結合技術特性、適用場景和行業實踐&#xff0c;為不同需求提供針對性解決方案&#xff1a;一、綜合型開源 BI 平臺1. Apache Superset&#xff08;Apache 2.0 協議&#xff09;核心優勢&#xff1a;全場景覆蓋&…

第05章 排序與分頁

1.排序數據 1.1 排序規則 1.2 單列排序 1.3 多列排序 2.分頁 2.1 背景 背景1:查詢返回的記錄太多了,查看起來很不方便,怎么樣能夠實現分頁查詢呢? 背景2:表里有 4 條數據,我們只想要顯示第 2、3 條數據怎么辦呢? 2.2 實現規則 分頁原理:所謂分頁顯示,就是將數據…

第4章 程序段的反復執行4.2while語句P128練習題(題及答案)

&#xff08;&#xff08;1&#xff09;閱讀程序#include <bits/stdc.h> using namespace std; //湯永紅 int main(){int n,s0;cin >> n;while(n){s s * 10 n % 10;n / 10;}cout << s << endl;return 0; }分別輸入&#xff1a;0 1024 1234567890輸出…

Linux下管道的實現

1.溫故知新在上一篇博客我們知道了動態庫是怎么樣進行鏈接的&#xff0c;我們知道我們的.o文件&#xff0c;可執行文件都是我們的ELF格式的文件&#xff0c;是ELF文件&#xff0c;里面就有ELF header&#xff0c;程序頭表&#xff0c;節&#xff0c;還有節頭表&#xff0c;我們…

光貓、路由器和交換機

光貓&#xff1a;全稱為光調制解調器&#xff0c;負責光信號與電信號的轉換。在光纖入戶的網絡環境中&#xff0c;運營商通過光纖傳輸光信號&#xff0c;光貓將其轉換為電腦、路由器等設備能識別的電信號&#xff0c;反之亦然。它是用戶端與運營商網絡之間的橋梁&#xff0c;保…

從零開始理解編譯原理:設計一個簡單的編程語言

編譯原理是計算機科學的核心領域之一&#xff0c;它研究如何將高級編程語言轉換為目標機器能夠執行的代碼。對于許多開發者來說&#xff0c;編譯原理可能是一個神秘而復雜的領域&#xff0c;但實際上&#xff0c;通過系統的學習和實踐&#xff0c;我們可以逐步掌握其核心概念和…

年輕新標桿!東方心繡臉韌帶年輕技術升級發布

年輕新標桿&#xff01;東方心繡臉韌帶年輕技術升級發布近日&#xff0c;“東方心繡臉韌帶年輕品項升級發布會”圓滿落幕。本次發布會聚焦現代女性面臨的衰老困擾&#xff0c;正式推出技術升級成果——“韌帶年輕”品項&#xff0c;旨在通過更科學的方案&#xff0c;助力求美者…

qt文件操作與qss基礎

文章目錄qt文件操作文件概述文件讀寫文件屬性界面優化qss基礎選擇器的用法結語很高興和大家見面&#xff0c;給生活加點impetus&#xff01;&#xff01;開啟今天的編程之路&#xff01;&#xff01; 作者&#xff1a;?( ‘ω’ )?260 我的專欄&#xff1a;qt&#xff0c;Li…

spring.config.import 不存在

確認spring.config.import的語法是否正確根據Spring Cloud的官方文檔&#xff0c;該屬性的值應該指向配置信息&#xff0c;例如對于Nacos配置中心&#xff0c;其格式通常為&#xff1a;spring:config:import: nacos://<nacos-server-addr>/<data-id>?group<gro…

kettle插件-kettle MinIO插件,輕松解決文件上傳到MinIO服務器

場景&#xff1a;周二下班剛下地鐵的時候有一位大佬&#xff0c;咨詢kettle是否可以適配MinIO&#xff0c;功能要實現將圖片或者base64通過kettle直接上傳到MinIO服務器。接到需求&#xff0c;溝通需求&#xff0c;開干。經過3天左右研發和調試MinIO插件已經成功交付&#xff0…

套接字編程UDP

1.創建套接字int socket(int domain, int type, int protocol);第一個參數&#xff0c;底層用的ip報文統一使用的網絡協議都是AFIN第二個參數&#xff0c;面向流的傳輸協議SOCK_DGRAM&#xff08;數據報套接字類型&#xff09;&#xff1a;支持數據報&#xff08;無連接、不可靠…

計算機網絡:如何判斷B或者C類IP地址是否劃分了子網

要判斷B類或C類IP地址是否劃分了子網,核心在于通過子網掩碼分析其網絡位長度是否超過該類地址的默認網絡位長度。以下是具體的判斷方法和細節說明: 一、基礎概念:IP地址類別與默認網絡位 IP地址分為A、B、C三類(常用),每類地址的默認網絡位長度(即未劃分子網時,用于標…

智慧農業溫室大棚物聯網遠程監控與智能監測系統

一、痛點破局&#xff1a;從“靠天吃飯”到“知天而作”傳統溫室大棚管理依賴人工巡檢與經驗判斷&#xff0c;存在三大核心痛點&#xff1a;數據孤島&#xff1a;溫濕度、光照、CO?濃度等關鍵參數分散于不同設備&#xff0c;難以實時整合分析&#xff1b;響應滯后&#xff1a;…

PID學習筆記1

在學習江協科技PID課程時&#xff0c;做一些筆記&#xff0c;對應視頻1-4&#xff0c;對應代碼&#xff1a;02&#xff0c;03&#xff0c;04&#xff0c;0502-位置式PID定速控制main.c:#include "stm32f10x.h" // Device header #include "Del…

C++入門學習3

10.類和對象 C語言結構體中只能定義變量&#xff0c;在C中&#xff0c;結構體內不僅可以定義變量&#xff0c;也可以定義函數。 C中定義類&#xff08;結構體&#xff09;的語法&#xff1a; class className {// 類體&#xff1a;由成員函數和成員變量組成}; // 一定要注意…

奇偶校驗碼原理與FPGA實現

奇偶校驗原理與FPGA實現寫在前面一、基礎原理2.1 奇校驗2.2 偶校驗2.3 缺點二、舉個例子3.1 奇校驗例子3.2 偶校驗例子3.3 檢測出錯例子三、FPGA實現寫在后面寫在前面 奇偶校驗碼是一種簡單的檢錯碼&#xff0c;主要用于數據傳輸或存儲過程中檢測奇數個比特錯誤或者偶數個比特錯…