c語言插入排序算法(詳解)

插入排序是一種簡單直觀的排序算法,其主要思想是將一個待排序的元素插入到已經排好序的部分的合適位置。

插入排序的原理如下:

  1. 將序列分為兩部分:已排序部分和未排序部分。初始時,已排序部分只包含第一個元素,未排序部分包含其余的元素。
  2. 從未排序部分取出第一個元素,將其插入到已排序部分的合適位置,使得已排序部分仍然保持有序。
  3. 重復步驟2,直到未排序部分中的所有元素都被插入到已排序部分,排序完成。

插入排序是一種穩定的排序算法,時間復雜度為O(n^2),在最壞的情況下,需要進行大量的元素移動。但在實際應用中,當待排序序列基本有序時,插入排序的效率會非常高,因為大部分元素不需要移動。另外,插入排序是一種原地排序算法,不需要額外的空間,因此在空間復雜度上較為優秀。
在這里插入圖片描述插入排序的代碼:

插入排序在序列基本有序的情況下插入的效率非常的高,數據序列比較少的情況下插入排序的效率是很高的

插入排序的項目結構
在這里插入圖片描述插入排序項目代碼截圖:

在這里插入圖片描述插入排序具體的代碼

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <string.h>
#include <time.h>
#include <sys/timeb.h>#define MAX 10
// 獲取當前系統的時間
long getSystemTime() {struct timeb tb;ftime(&tb);return tb.time * 1000 + tb.millitm;
}// 交換函數
void Swap(int* a, int* b) {int temp = *a;*a = *b;*b = temp;
}
int flag = 0; // 表示沒有排序好
//插入排序實現的代碼
void InsertSort(int arr[], int length) {int j;for (int i = 1; i < length; i++) {// 用當前這個數和前面的這個數進行比較if (arr[i] < arr[i - 1]) {// 插入排序,給數據做一個緩存int temp = arr[i];for (j = i - 1; j >= 0 && temp < arr[j];j--) {arr[j + 1] = arr[j];}arr[j + 1] = temp;}}}// 打印函數
void PrintArray(int arr[], int length) {for (int i = 0; i < length; i++) {printf("%d ", arr[i]);}printf("\n");
}
int main()
{int arr[MAX];srand((unsigned int)time(NULL));for (int i = 0; i < MAX; i++) {int randNum = rand() % MAX;arr[i] = randNum;}PrintArray(arr, MAX);//插入排序long InsertSort_start = getSystemTime();InsertSort(arr, MAX);PrintArray(arr, MAX);long InsertSort_end = getSystemTime();printf("插入排序%d個元素所需要的時間:%ld\n", MAX, InsertSort_end - InsertSort_start);return 0;}

插入排序運行結果展示:
在這里插入圖片描述

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

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

相關文章

php 接入 百度編輯器

按照github上的操作下載百度編輯器的包后&#xff0c;根據文檔上的步驟操作&#xff08;可能會遇到報錯&#xff09;&#xff1a; 1、git clone 倉庫 2、npm install 安裝依賴&#xff08;如果沒有安裝 grunt , 請先在全局安裝 grunt&#xff09; 我的是報了下面的錯&#…

Leetcode 17 電話號碼的字母組合

理解題意&#xff1a; 給定一個僅包含數字 2-9 的字符串&#xff0c;返回所有它能表示的字母組合 本質上&#xff1a;數字代表著一個字母集合 數字的個數決定了遞歸的深度&#xff0c;即樹的深度 數字代表的字母組合決定了當前樹的寬度。 1.暴力回溯 這里沒有什么剪枝…

387.字符串中的第一個唯一字符 —> `size()`

解答&#xff1a; int firstUniqChar(string s) {int size s.size();// char count[26] { 0 };// error.1int count[26] { 0 };// for (int i 0; i < s.size() - 1; i) // error.2for (int i 0; i < size; i){count[s[i] - a] 1;}for (int i 0; i < size; i){…

Android 幸運轉盤實現邏輯

一、前言 幸運轉盤在很多app中都有&#xff0c;也有很多現實的例子&#xff0c;不過這個難度并不是如何讓轉盤轉起來&#xff0c;真正的難度是如何統一個方向轉動&#xff0c;且轉到指定的目標區域&#xff08;中獎概率從來不是隨機的&#xff09;&#xff0c;當然還不能太假&…

AI全棧大模型工程師(二十二)什么是模型訓練

文章目錄 ?? 這節課會帶給你還是寫在前面Fine-Tuning 有什么用:先看一個例子我有很多問題一、什么是:二、什么是模型2.1、通俗(不嚴謹)的說、模型是一個函數:2.2、一個最簡單的神經網絡三、什么是模型訓練3.1、模型訓練本質上是一個求解最優化問題的過程3.2、怎么求解3.…

人類的耳朵:聽覺的動態范圍

作者&#xff1a;聽覺健康 聽覺的動態范圍即可用的聽力范圍。在坐標系中&#xff0c;它可以表示為以聽閾和最大舒適級為界形成的區域&#xff0c;其坐標軸分別為頻率和聲壓級&#xff08;刺激持續時間在某種程度上對其產生影響&#xff09;。是什么因素決定了人類聽力的極限&am…

隨機森林回歸模型,SHAP庫可視化

隨機森林回歸模型 創建一個隨機森林回歸模型&#xff0c;訓練模型&#xff0c;然后使用SHAP庫解釋模型的預測結果&#xff0c;并將結果可視化。 具體步驟如下&#xff1a; 首先&#xff0c;代碼導入了所需的庫&#xff0c;包括matplotlib、shap、numpy和sklearn.ensemble。ma…

Compilation failureFailure executing javac, but could not parse the error

記一次maven編譯錯誤導致的打包失敗問題。錯誤如下 Compilation failure Failure executing javac, but could not parse the error: javac: Ч ? : ? ? : javac <options> <source files> -help г ? ? 排查路徑如下&#xff1a; 1&#xff…

[原創] FPGA的JTAG燒錄不穩定或燒錄失敗原因分析

一、電路故障背景 打板回來常會出現燒錄不良&#xff0c;調試是一個技術活&#xff0c;如果燒錄不過關&#xff0c;一切白搭。 二、常見JTAG故障原因如下&#xff1a; 1、ESD防護器件焊接不良&#xff1b; 電路板給生產部分焊接&#xff0c;發現元器件虛焊&#xff0c;特別是…

【MySQL】MySQL的varchar字段最大長度是65535?

在MySQL建表sql里,我們經常會有定義字符串類型的需求。 CREATE TABLE `user` ( `name` varchar(100) NOT NULL DEFAULT COMMENT 名字) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ; 比方說user表里的名字,就是個字符串。MySQL里有兩個類型比較適合這個場景。 char和varchar。…

我嘗試用 AI 來做數據分析,結果差強人意!

大家好&#xff0c;我是木川 工作中經常會需要分析數據 1、統計分析&#xff0c;計算某項指標的均值、分位數、標準差等 2、相關性分析&#xff0c;比如分析銷售額與顧客年齡、顧客性別、促銷活動等的相關性 3、可視化分析&#xff0c;比如繪制柱狀圖、折線圖、散點圖等 有了 A…

幾種排序的實現

直接插入排序 直接插入排序是一種簡單的插入排序法&#xff0c;其基本思想是&#xff1a; 把待排序的記錄按其關鍵碼值的大小逐個插入到一個已經排好序的有序序列中&#xff0c;直到所有的記錄插入完為止&#xff0c;得到一個新的有序序列 。 實際中我們玩撲克牌時&#xff…

交付《啤酒游戲經營決策沙盤》的項目

感謝首富客戶連續兩年的邀請&#xff0c;交付《啤酒游戲經營決策沙盤》的項目&#xff0c;下周一JSTO首席學習官Luna想讓我分享下系統思考與投資理財&#xff0c;想到曾經看過的一本書《深度思維》&#xff0c;看到一些結構來預判未來。不僅僅可以應用在企業經營和組織發展上&a…

Uncaught SyntaxError: Unexpected end of input (at manage.html:1:21) 的一個解

關于Uncaught SyntaxError: Unexpected end of input (at manage.html:1:21)的一個解 問題復現 <button onclick"deleteItem(${order.id},hire,"Orders")" >delete</button>報錯 原因 函數參數的雙引號和外面的雙引號混淆了&#xff0c;改成…

【vuex】

vuex 1 理解vuex1.1 vuex是什么1.2 什么時候使用vuex1.3 vuex工作原理圖1.4 搭建vuex環境1.5 求和案例1.5.1 vue方式1.5.2 vuex方式 2 vuex核心概念和API2.1 getters配置項2.2 四個map方法的使用2.2.1 mapState方法2.2.2 mapGetters方法2.2.3 mapActions方法2.2.4 mapMutations…

買賣股票的最佳時機算法(leetcode第121題)

題目描述&#xff1a; 給定一個數組 prices &#xff0c;它的第 i 個元素 prices[i] 表示一支給定股票第 i 天的價格。你只能選擇 某一天 買入這只股票&#xff0c;并選擇在 未來的某一個不同的日子 賣出該股票。設計一個算法來計算你所能獲取的最大利潤。返回你可以從這筆交易…

“HALCON error #2454:HALCON handle was already cleared in operator set_draw“

分析&#xff1a;錯誤提示是窗口句柄已經被刪除&#xff0c;這是因為前邊的一句 HOperatorSet.CloseWindow(hWindowControl1.HalconWindow); 關掉了窗口&#xff0c;屏蔽或刪除即可。

UDS診斷 10服務的肯定響應碼后面跟著一串數據的含義,以及診斷報文格式定義介紹

一、首先看一下10服務的請求報文和肯定響應報文格式 a.診斷儀發送的請求報文格式 b.ECU回復的肯定響應報文格式 c.肯定響應報文中參數定義 二、例程數據解析 a.例程數據 0.000000 1 725 Tx d 8 02 10 03 00 00 00 00 00 0.000806 1 7A5 Rx d 8 06 50 03 00 32 01 F4 CC …

Brushed DC mtr--PIC

PIC use brushed DC mtr fundmental. Low-Cost Bidirectional Brushed DC Motor Control Using the PIC16F684 DC mtr & encoder

《opencv實用探索·八》圖像模糊之均值濾波、高斯濾波的簡單理解

1、前言 什么是噪聲&#xff1f; 該像素與周圍像素的差別非常大&#xff0c;導致從視覺上就能看出該像素無法與周圍像素組成可識別的圖像信息&#xff0c;降低了整個圖像的質量。這種“格格不入”的像素就被稱為圖像的噪聲。如果圖像中的噪聲都是隨機的純黑像素或者純白像素&am…