日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

算法周记(一)直接插入排序

發(fā)布時(shí)間:2025/5/22 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法周记(一)直接插入排序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

算法在計(jì)算機(jī)科學(xué)領(lǐng)域中占有舉足輕重的地位,一套算法設(shè)計(jì)的好壞直接決定了一項(xiàng)工程的成敗。在大學(xué)教育中老師就教導(dǎo)我們要數(shù)據(jù)結(jié)構(gòu) + 算法(現(xiàn)在還需要加上體系結(jié)構(gòu)吧),但是這兩門基礎(chǔ)課我卻從沒有學(xué)好過:)我打算來(lái)個(gè)周記,每周仔細(xì)研究一個(gè)算法,然后分別用C#、Java、Matlab實(shí)現(xiàn),供感興趣的朋友一起學(xué)習(xí)、研究。除了常見的算法分類之外,我會(huì)格外關(guān)注數(shù)值算法,因?yàn)槲覍?duì)數(shù)學(xué)有著濃厚的興趣。由于我C++學(xué)的不好,故不提供C++算法實(shí)現(xiàn),具體C++的資料很多,感興趣的朋友可以多查找下。

示例代碼下載

測(cè)試環(huán)境:

Windows Server 2008 R2 DataCenter

C#:Visual Studio 2010 Ultimate RC(.NET Framework 4.0 RC x64)

Java:Eclipse SDK 3.5.1 x64(JDK 1.6 Update 18 x64)

Matlab:Matlab R2009b x64

PS(Visual Studio 2010正式版即將發(fā)布,到時(shí)會(huì)更新;Matlab R2010a已經(jīng)發(fā)布,正在測(cè)試,近期也會(huì)更新)

?

直接插入排序

基本思想:每次將一個(gè)待排序的記錄,按其關(guān)鍵字大小插入到前面已經(jīng)排好序的記錄中的適當(dāng)位置,直到全部記錄插入完成為止。

直接插入排序是把一個(gè)序列分為兩部分,第一部分是排好序的,數(shù)學(xué)上叫做"有序區(qū)",然后從第二個(gè)部分中("無(wú)序區(qū)")將第一個(gè)記錄插入到有序區(qū)中,使得插入后有序區(qū)仍然有序。然后重復(fù)上述操作,每次無(wú)序區(qū)均減少一個(gè)記錄,直至其中記錄數(shù)為零。

復(fù)雜度:時(shí)間復(fù)雜度為O(N^2),空間復(fù)雜度為O(1)。

可以看出,N^2還是很大的,當(dāng)N較大時(shí),不宜采用直接插入排序。推薦記錄的數(shù)目是N<20。

?

C#語(yǔ)言描述:

代碼 using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;

namespace?InsertSort
{
????
class?InsertSortDemo
????{
????????
private?static?int[]?fxInsertSort(int[]?arr)
????????{
????????????
int?i,?j,?arrTmp;
????????????
for?(i?=?1;?i?<?arr.Length;?i++)
????????????{
????????????????j?
=?i;
????????????????arrTmp?
=?arr[i];
????????????????
while?(j?>?0?&&?arr[j?-?1]?>?arrTmp)
????????????????{
????????????????????arr[j]?
=?arr[j?-?1];
????????????????????j
--;
????????????????}
????????????????arr[j]?
=?arrTmp;
????????????}
????????????
return?arr;
????????}

????????
static?void?Main(string[]?args)
????????{
????????????
int[]?arr?=?InsertSortDemo.fxInsertSort(new?int[]?{?1,?4,?2,?6,?5?});
????????????
foreach?(int?i?in?arr)
????????????{
????????????????Console.Write(i?
+?",");
????????????}
????????????Console.ReadLine();
????????}
????}
}

?

Java語(yǔ)言描述:

代碼 package?brooks.cnblogs.arithmetic.sort;

public?class?InsertSortDemo?{

????
/**
?????*?
@param?args
?????
*/
????
private?static?int[]?fxInsertSort(int[]?arr)?{
????????
int?i,?j,?arrTmp;
????????
for?(i?=?1;?i?<?arr.length;?i++)?{
????????????j?
=?i;
????????????arrTmp?
=?arr[i];
????????????
while?(j?>?0?&&?arr[j?-?1]?>?arrTmp)?{
????????????????arr[j]?
=?arr[j?-?1];
????????????????j
--;
????????????}
????????????arr[j]?
=?arrTmp;
????????}
????????
return?arr;
????}

????
public?static?void?main(String[]?args)?{
????????
//?TODO?Auto-generated?method?stub
????????int[]?arr?=?InsertSortDemo.fxInsertSort(new?int[]?{?1,?4,?2,?6,?5?});

????????
for?(int?i?=?0;?i?<?arr.length;?i++)?{
????????????System.out.print(arr[i]?
+?",");
????????}
????}
}

?

Matlab語(yǔ)言描述:

代碼 %?定義數(shù)組
arr?
=?[1?4?2?6?5];
%?Matlab中數(shù)組索引從1開始
for?i?=?2:length(arr)
????j?
=?i;
????arrTmp?
=?arr(i);
????while?j?
>?1?&&?(arr(j?-?1)?>?arrTmp)
????????arr
(j)?=?arr(j?-?1);
????????j?
=?j?-?1;
????
end
????arr
(j)?=?arrTmp;
end
%?輸出排序后結(jié)果
disp
(arr);

轉(zhuǎn)載于:https://www.cnblogs.com/brooks-dotnet/archive/2010/03/14/1685581.html

總結(jié)

以上是生活随笔為你收集整理的算法周记(一)直接插入排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。