日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言插入排序算法及代码

發布時間:2023/12/9 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言插入排序算法及代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

插入排序是排序算法的一種,它不改變原有的序列(數組),而是創建一個新的序列,在新序列上進行操作。

這里以從小到大排序為例進行講解。

基本思想及舉例說明

插入排序的基本思想是,將元素逐個添加到已經排序好的數組中去,同時要求,插入的元素必須在正確的位置,這樣原來排序好的數組是仍然有序的。

在實際使用中,通常是排序整個無序數組,所以把這個無序數組分為兩部分排序好的子數組和待插入的元素。第一輪時,將第一個元素作為排序好的子數組,插入第二個元素;第二輪,將前兩個元素作為排序好的數組,插入第三個元素。以此類推,第i輪排序時,在前i個元素的子數組中插入第i+1個元素。直到所有元素都加入排序好數組。

下面,以對 3? 2? 4? 1 進行選擇排序說明插入過程,使用j記錄元素需要插入的位置。排序目標是使數組從小到大排列。

第1輪
[ 3 ]? [ 2? 4? 1 ]? (最初狀態,將第1個元素分為排序好的子數組,其余為待插入元素)
[ 3 ]? [ 2? 4? 1 ]? (由于3>2,所以待插入位置j=1)
[ 2? 3 ]? [ 4? 1 ]? (將2插入到位置j)

第2輪
[ 2? 3 ]? [ 4? 1 ] (第1輪排序結果)
[ 2? 3 ]? [ 4? 1 ] (由于2<4,所以先假定j=2)
[ 2? 3 ]? [ 4? 1 ] (由于3<4,所以j=3)
[ 2? 3? 4 ]? [ 1 ] (由于4剛好在位置3,無需插入)

第3輪
[ 2? 3? 4 ]? [ 1 ] (第2輪排序結果)
[ 2? 3? 4 ]? [ 1 ] (由于1<2,所以j=1)
[1? 2? 3? 4 ]??? (將1插入位置j,待排序元素為空,排序結束)

算法總結及實現

選擇排序對大小為N的無序數組R[N]進行排序,進行N-1輪選擇過程。首先將第1個元素作為已經排序好的子數組,然后將剩余的N-1個元素,逐個插入到已經排序好子數組;。因此,在第 i輪排序時,前i個元素總是有序的,將第i+1個元素插入到正確的位置。

?
  • #include<stdio.h>
  • #include<stdlib.h>
  • ?
  • #define N 8
  • ?
  • void insert_sort(int a[],int n);
  • ?
  • ?
  • //插入排序實現,這里按從小到大排序
  • void insert_sort(int a[],int n)//n為數組a的元素個數
  • {
  • //進行N-1輪插入過程
  • for(int i=1; i<n; i++)
  • {
  • //首先找到元素a[i]需要插入的位置
  • int j=0;
  • while( (a[j]<a[i]) && (j<i))
  • {
  • j++;
  • }
  • ?
  • //將元素插入到正確的位置
  • if(i != j) //如果i==j,說明a[i]剛好在正確的位置
  • {
  • int temp = a[i];
  • for(int k = i; k > j; k--)
  • {
  • a[k] = a[k-1];
  • }
  • a[j] = temp;
  • }
  • }
  • }
  • ?
  • ?
  • int main()
  • {
  • int num[N] = {89, 38, 11, 78, 96, 44, 19, 25};
  • ?
  • insert_sort(num, N);
  • ?
  • for(int i=0; i<N; i++)
  • printf("%d ", num[i]);
  • ?
  • printf("\n");
  • ?
  • ?
  • system("pause");
  • return 0;
  • }
  • 注意:插入排序是一種穩定的排序算法,不會改變原有序列中相同數字的順序。

    插入排序是在一個已經有序的小序列的基礎上,一次插入一個元素。當然,剛開始這個有序的小序列只有1個元素,就是第一個元素。比較是從有序序列的末尾開始,也就是想要插入的元素和已經有序的最大者開始比起,如果比它大則直接插入在其后面,否則一直往前找直到找到它該插入的位置。如果碰見一個和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后順序沒有改變,從原無序序列出去的順序就是排好序后的順序,所以插入排序是穩定的。

    轉載于:https://my.oschina.net/HeroOneHY/blog/919889

    總結

    以上是生活随笔為你收集整理的C语言插入排序算法及代码的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。