最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C 語言插入排序算法及實例代碼

 更新時間:2016年07月18日 15:56:05   投稿:lqh  
本文主要介紹C語言插入排序,這里給大家詳細(xì)介紹插入排序的思想并舉例說明,還有實現(xiàn)代碼,有需要的朋友可以參考下

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

這里以從小到大排序為例進(jìn)行講解。

基本思想及舉例說明

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

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

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

第1輪

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

第2輪

[ 2  3 ]  [ 4  1 ] (第1輪排序結(jié)果)
[ 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輪排序結(jié)果)
[ 2  3  4 ]  [ 1 ] (由于1<2,所以j=1)
[1  2  3  4 ]    (將1插入位置j,待排序元素為空,排序結(jié)束)

算法總結(jié)及實現(xiàn)

選擇排序?qū)Υ笮镹的無序數(shù)組R[N]進(jìn)行排序,進(jìn)行N-1輪選擇過程。首先將第1個元素作為已經(jīng)排序好的子數(shù)組,然后將剩余的N-1個元素,逐個插入到已經(jīng)排序好子數(shù)組;。因此,在第 i輪排序時,前i個元素總是有序的,將第i+1個元素插入到正確的位置。

#include<stdio.h>
#include<stdlib.h>
#define N 8
void insert_sort(int a[],int n);
//插入排序?qū)崿F(xiàn),這里按從小到大排序
void insert_sort(int a[],int n)//n為數(shù)組a的元素個數(shù)
{
 //進(jìn)行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;
}

注意:插入排序是一種穩(wěn)定的排序算法,不會改變原有序列中相同數(shù)字的順序。

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

以上就是對插入排序的詳細(xì)介紹,希望能幫助C語言開發(fā)的同學(xué)理解掌握插入排序。

相關(guān)文章

  • C語言實現(xiàn)發(fā)送郵件功能

    C語言實現(xiàn)發(fā)送郵件功能

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)發(fā)送郵件功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • opengl實現(xiàn)直線掃描算法和區(qū)域填充算法

    opengl實現(xiàn)直線掃描算法和區(qū)域填充算法

    這篇文章主要為大家詳細(xì)介紹了opengl實現(xiàn)直線掃描算法和區(qū)域填充算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C++成員函數(shù)中const的使用詳解

    C++成員函數(shù)中const的使用詳解

    這篇文章主要為大家詳細(xì)介紹了C++成員函數(shù)中const的使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++特殊成員函數(shù)以及其生成機(jī)制詳解

    C++特殊成員函數(shù)以及其生成機(jī)制詳解

    這篇文章主要給大家介紹了關(guān)于C++特殊成員函數(shù)以及其生成機(jī)制的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-02-02
  • 使用pthread庫實現(xiàn)openssl多線程ssl服務(wù)端和客戶端

    使用pthread庫實現(xiàn)openssl多線程ssl服務(wù)端和客戶端

    使用pthread庫實現(xiàn)openssl多線程ssl服務(wù)端和客戶端,大家參考使用吧
    2014-01-01
  • 淺談內(nèi)聯(lián)函數(shù)與宏定義的區(qū)別詳解

    淺談內(nèi)聯(lián)函數(shù)與宏定義的區(qū)別詳解

    本篇文章是對內(nèi)聯(lián)函數(shù)與宏定義的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言指針詳解及用法示例

    C語言指針詳解及用法示例

    這篇文章主要介紹了C語言指針詳解及用法示例,介紹了其相關(guān)概念,然后分享了幾種用法,具有一定參考價值。需要的朋友可以了解下。
    2017-11-11
  • C語言實現(xiàn)可增容動態(tài)通訊錄詳細(xì)過程

    C語言實現(xiàn)可增容動態(tài)通訊錄詳細(xì)過程

    這篇文章主要為大家介紹了C語言實現(xiàn)簡易通訊錄的完整流程,此通訊錄還可以增容,并且每個環(huán)節(jié)都有完整代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-05-05
  • C++中友元的實例詳解

    C++中友元的實例詳解

    這篇文章主要介紹了C++中友元的實例詳解的相關(guān)資料,希望通過本文大家能掌握友元的使用方法,需要的朋友可以參考下
    2017-09-09
  • C語言深入分析數(shù)組指針和指針數(shù)組的應(yīng)用

    C語言深入分析數(shù)組指針和指針數(shù)組的應(yīng)用

    在C語言和C++等語言中,數(shù)組元素全為指針變量的數(shù)組稱為指針數(shù)組,指針數(shù)組中的元素都必須具有相同的存儲類型、指向相同數(shù)據(jù)類型的指針變量。指針數(shù)組比較適合用來指向若干個字符串,使字符串處理更加方便、靈活
    2022-04-04

最新評論

伊金霍洛旗| 车致| 阿鲁科尔沁旗| 白水县| 克拉玛依市| 台湾省| 襄樊市| 大庆市| 临西县| 贵港市| 兴海县| 青浦区| 镇坪县| 高淳县| 沁阳市| 慈利县| 基隆市| 巧家县| 和田县| 舒城县| 沂南县| 石渠县| 巫溪县| 贵德县| 石阡县| 揭阳市| 彰化县| 大足县| 铜鼓县| 宁强县| 宁河县| 锦州市| 丹凤县| 长顺县| 平塘县| 高安市| 太保市| 渝北区| 临江市| 静乐县| 万全县|