當(dāng)前位置:首頁(yè) > 工業(yè)控制 > 電子設(shè)計(jì)自動(dòng)化
[導(dǎo)讀]首先介紹一個(gè)計(jì)算時(shí)間差的函數(shù),它在<time.h>頭文件中定義,于是我們只需這樣定義2個(gè)變量,再相減就可以計(jì)算時(shí)間差了。 函數(shù)開頭加上 clock_t start = clock(); 函數(shù)結(jié)尾加上 clock_t end = clock(); 于是時(shí)間差為:

首先介紹一個(gè)計(jì)算時(shí)間差的函數(shù),它在<time.h>頭文件中定義,于是我們只需這樣定義2個(gè)變量,再相減就可以計(jì)算時(shí)間差了。

函數(shù)開頭加上

clock_t start = clock();

函數(shù)結(jié)尾加上

clock_t end = clock();

于是時(shí)間差為: end - start

不過(guò)這不精確的 多次運(yùn)行時(shí)間是不同的 和CPU 進(jìn)程有關(guān)吧

(先總結(jié)一下:以下算法以時(shí)間和空間以及編碼難度,以及實(shí)用性方面來(lái)看,快速排序法是最優(yōu)秀的!推薦!~

但是希爾排序又是最經(jīng)典的一個(gè),所以建議優(yōu)先看這2個(gè)排序算法)

排序算法是一種基本并且常用的算法。由于實(shí)際工作中處理的數(shù)量巨大,所以排序算法

對(duì)算法本身的速度要求很高。

而一般我們所謂的算法的性能主要是指算法的復(fù)雜度,一般用O方法來(lái)表示。在后面我將

給出詳細(xì)的說(shuō)明。

對(duì)于排序的算法我想先做一點(diǎn)簡(jiǎn)單的介紹,也是給這篇文章理一個(gè)提綱。

我將按照算法的復(fù)雜度,從簡(jiǎn)單到難來(lái)分析算法。

第一部分是簡(jiǎn)單排序算法,后面你將看到他們的共同點(diǎn)是算法復(fù)雜度為O(N*N)(因?yàn)闆]有

使用word,所以無(wú)法打出上標(biāo)和下標(biāo))。

第二部分是高級(jí)排序算法,復(fù)雜度為O(Log2(N))。這里我們只介紹一種算法。另外還有幾種

算法因?yàn)樯婕皹渑c堆的概念,所以這里不于討論。

第三部分類似動(dòng)腦筋。這里的兩種算法并不是最好的(甚至有最慢的),但是算法本身比較

奇特,值得參考(編程的角度)。同時(shí)也可以讓我們從另外的角度來(lái)認(rèn)識(shí)這個(gè)問(wèn)題。

第四部分是我送給大家的一個(gè)餐后的甜點(diǎn)——一個(gè)基于模板的通用快速排序。由于是模板函數(shù)

可以對(duì)任何數(shù)據(jù)類型排序(抱歉,里面使用了一些論壇專家的呢稱)。

現(xiàn)在,讓我們開始吧:

一、簡(jiǎn)單排序算法

由于程序比較簡(jiǎn)單,所以沒有加什么注釋。所有的程序都給出了完整的運(yùn)行代碼,并在我的VC環(huán)境

下運(yùn)行通過(guò)。因?yàn)闆]有涉及MFC和WINDOWS的內(nèi)容,所以在BORLAND C++的平臺(tái)上應(yīng)該也不會(huì)有什么

問(wèn)題的。在代碼的后面給出了運(yùn)行過(guò)程示意,希望對(duì)理解有幫助。

1.冒泡法:

這是最原始,也是眾所周知的最慢的算法了。他的名字的由來(lái)因?yàn)樗墓ぷ骺磥?lái)象是冒泡:

#include <iostream.h>

void BubbleSort(int* pData,int Count)

{

int iTemp;

for(int i=1;i<Count;i++)

{

for(int j=Count-1;j>=i;j--)

{

if(pData[j]<pData[j-1]) [Page]

{

iTemp = pData[j-1];

pData[j-1] = pData[j];

pData[j] = iTemp;

}

}

}

}

void main()

{

int data[] = {10,9,8,7,6,5,4};

BubbleSort(data,7);

for (int i=0;i<7;i++)

cout<<data[i]<<" ";

cout<<"\n";

}

倒序(最糟情況)

第一輪:10,9,8,7->10,9,7,8->10,7,9,8->7,10,9,8(交換3次)

第二輪:7,10,9,8->7,10,8,9->7,8,10,9(交換2次)

第一輪:7,8,10,9->7,8,9,10(交換1次)

循環(huán)次數(shù):6次

交換次數(shù):6次

其他:

第一輪:8,10,7,9->8,10,7,9->8,7,10,9->7,8,10,9(交換2次)

第二輪:7,8,10,9->7,8,10,9->7,8,10,9(交換0次)

第一輪:7,8,10,9->7,8,9,10(交換1次)

循環(huán)次數(shù):6次

交換次數(shù):3次

上面我們給出了程序段,現(xiàn)在我們分析它:這里,影響我們算法性能的主要部分是循環(huán)和交換,

顯然,次數(shù)越多,性能就越差。從上面的程序我們可以看出循環(huán)的次數(shù)是固定的,為1+2+...+n-1。

寫成公式就是1/2*(n-1)*n。

現(xiàn)在注意,我們給出O方法的定義:

若存在一常量K和起點(diǎn)n0,使當(dāng)n>=n0時(shí),有f(n)<=K*g(n),則f(n) = O(g(n))。(呵呵,不要說(shuō)沒

學(xué)好數(shù)學(xué)呀,對(duì)于編程數(shù)學(xué)是非常重要的!?。。?/P>

現(xiàn)在我們來(lái)看1/2*(n-1)*n,當(dāng)K=1/2,n0=1,g(n)=n*n時(shí),1/2*(n-1)*n<=1/2*n*n=K*g(n)。所以f(n)

=O(g(n))=O(n*n)。所以我們程序循環(huán)的復(fù)雜度為O(n*n)。

再看交換。從程序后面所跟的表可以看到,兩種情況的循環(huán)相同,交換不同。其實(shí)交換本身同數(shù)據(jù)源的

有序程度有極大的關(guān)系,當(dāng)數(shù)據(jù)處于倒序的情況時(shí),交換次數(shù)同循環(huán)一樣(每次循環(huán)判斷都會(huì)交換),

復(fù)雜度為O(n*n)。當(dāng)數(shù)據(jù)為正序,將不會(huì)有交換。復(fù)雜度為O(0)。亂序時(shí)處于中間狀態(tài)。正是由于這樣的

原因,我們通常都是通過(guò)循環(huán)次數(shù)來(lái)對(duì)比算法。

2.交換法:

交換法的程序最清晰簡(jiǎn)單,每次用當(dāng)前的元素一一的同其后的元素比較并交換。

#include <iostream.h>

void ExchangeSort(int* pData,int Count)

{

int iTemp;

for(int i=0;i<Count-1;i++)

{

for(int j=i+1;j<Count;j++)

{

if(pData[j]<pData[i]) [Page]

{

iTemp = pData[i];

pData[i] = pData[j];

pData[j] = iTemp;

}

}

}

}

void main()

{

int data[] = {10,9,8,7,6,5,4};

ExchangeSort(data,7);

for (int i=0;i<7;i++)

cout<<data[i]<<" ";

cout<<"\n";

}

倒序(最糟情況)

第一輪:10,9,8,7->9,10,8,7->8,10,9,7->7,10,9,8(交換3次)

第二輪:7,10,9,8->7,9,10,8->7,8,10,9(交換2次)

第一輪:7,8,10,9->7,8,9,10(交換1次)

循環(huán)次數(shù):6次

交換次數(shù):6次

其他:

第一輪:8,10,7,9->8,10,7,9->7,10,8,9->7,10,8,9(交換1次)

第二輪:7,10,8,9->7,8,10,9->7,8,10,9(交換1次)

第一輪:7,8,10,9->7,8,9,10(交換1次)

循環(huán)次數(shù):6次

交換次數(shù):3次

從運(yùn)行的表格來(lái)看,交換幾乎和冒泡一樣糟。事實(shí)確實(shí)如此。循環(huán)次數(shù)和冒泡一樣

也是1/2*(n-1)*n,所以算法的復(fù)雜度仍然是O(n*n)。由于我們無(wú)法給出所有的情況,所以

只能直接告訴大家他們?cè)诮粨Q上面也是一樣的糟糕(在某些情況下稍好,在某些情況下稍差)。

3.選擇法:

現(xiàn)在我們終于可以看到一點(diǎn)希望:選擇法,這種方法提高了一點(diǎn)性能(某些情況下)

這種方法類似我們?nèi)藶榈呐判蛄?xí)慣:從數(shù)據(jù)中選擇最小的同第一個(gè)值交換,在從省下的部分中

選擇最小的與第二個(gè)交換,這樣往復(fù)下去。

#include <iostream.h>

void SelectSort(int* pData,int Count)

{

int iTemp; //一個(gè)存儲(chǔ)值。

int iPos; //一個(gè)存儲(chǔ)下標(biāo)。

for(int i=0;i<Count-1;i++)

{

iTemp = pData[i];

iPos = i;

for(int j=i+1;j<Count;j++)

{

if(pData[j]<iTemp) //選擇排序法就是用第一個(gè)元素與最小的元素交換。

{

iTemp = pData[j];

iPos = j; //下標(biāo)的交換賦值。 [Page]

}

}

pData[iPos] = pData[i];

pData[i] = iTemp;

}

}

void main()

{

int data[] = {10,9,8,7,6,5,4};

SelectSort(data,7);

for (int i=0;i<7;i++)

cout<<data[i]<<" ";

cout<<"\n";

}

倒序(最糟情況)

第一輪:10,9,8,7->(iTemp=9)10,9,8,7->(iTemp=8)10,9,8,7->(iTemp=7)7,9,8,10(交換1次)

第二輪:7,9,8,10->7,9,8,10(iTemp=8)->(iTemp=8)7,8,9,10(交換1次)

第一輪:7,8,9,10->(iTemp=9)7,8,9,10(交換0次)

循環(huán)次數(shù):6次

交換次數(shù):2次

其他:

第一輪:8,10,7,9->(iTemp=8)8,10,7,9->(iTemp=7)8,10,7,9->(iTemp=7)7,10,8,9(交換1次)

第二輪:7,10,8,9->(iTemp=8)7,10,8,9->(iTemp=8)7,8,10,9(交換1次)

第一輪:7,8,10,9->(iTemp=9)7,8,9,10(交換1次)

循環(huán)次數(shù):6次

交換次數(shù):3次

遺憾的是算法需要的循環(huán)次數(shù)依然是1/2*(n-1)*n。所以算法復(fù)雜度為O(n*n)。

我們來(lái)看他的交換。由于每次外層循環(huán)只產(chǎn)生一次交換(只有一個(gè)最小值)。所以f(n)<=n

所以我們有f(n)=O(n)。所以,在數(shù)據(jù)較亂的時(shí)候,可以減少一定的交換次數(shù)。

4.插入法:

插入法較為復(fù)雜,它的基本工作原理是抽出牌,在前面的牌中尋找相應(yīng)的位置插入,然后繼續(xù)下一張

#include <iostream.h>

void InsertSort(int* pData,int Count)

{

int iTemp;

int iPos;

for(int i=1;i<Count;i++)

{

iTemp = pData[i];

iPos = i-1;

while((iPos>=0) && (iTemp<pData[iPos]))

{

pData[iPos+1] = pData[iPos];

iPos--;

}

pData[iPos+1] = iTemp;

}

}

void main()

{

int data[] = {10,9,8,7,6,5,4};

InsertSort(data,7);

for (int i=0;i<7;i++)

cout<<data[i]<<" ";

cout<<"\n";

}

倒序(最糟情況)

第一輪:10,9,8,7->9,10,8,7(交換1次)(循環(huán)1次) [Page]

第二輪:9,10,8,7->8,9,10,7(交換1次)(循環(huán)2次)

第一輪:8,9,10,7->7,8,9,10(交換1次)(循環(huán)3次)

循環(huán)次數(shù):6次

交換次數(shù):3次

其他:

第一輪:8,10,7,9->8,10,7,9(交換0次)(循環(huán)1次)

第二輪:8,10,7,9->7,8,10,9(交換1次)(循環(huán)2次)

第一輪:7,8,10,9->7,8,9,10(交換1次)(循環(huán)1次)

循環(huán)次數(shù):4次

交換次數(shù):2次

上面結(jié)尾的行為分析事實(shí)上造成了一種假象,讓我們認(rèn)為這種算法是簡(jiǎn)單算法中最好的,其實(shí)不是,

因?yàn)槠溲h(huán)次數(shù)雖然并不固定,我們?nèi)钥梢允褂肙方法。從上面的結(jié)果可以看出,循環(huán)的次數(shù)f(n)<=

1/2*n*(n-1)<=1/2*n*n。所以其復(fù)雜度仍為O(n*n)(這里說(shuō)明一下,其實(shí)如果不是為了展示這些簡(jiǎn)單

排序的不同,交換次數(shù)仍然可以這樣推導(dǎo))?,F(xiàn)在看交換,從外觀上看,交換次數(shù)是O(n)(推導(dǎo)類似

選擇法),但我們每次要進(jìn)行與內(nèi)層循環(huán)相同次數(shù)的‘=’操作。正常的一次交換我們需要三次‘=’

而這里顯然多了一些,所以我們浪費(fèi)了時(shí)間。

最終,我個(gè)人認(rèn)為,在簡(jiǎn)單排序算法中,選擇法是最好的。

二、高級(jí)排序算法:

高級(jí)排序算法中我們將只介紹這一種,同時(shí)也是目前我所知道(我看過(guò)的資料中)的最快的。

它的工作看起來(lái)仍然象一個(gè)二叉樹。首先我們選擇一個(gè)中間值middle程序中我們使用數(shù)組中間值,然后

把比它小的放在左邊,大的放在右邊(具體的實(shí)現(xiàn)是從兩邊找,找到一對(duì)后交換)。然后對(duì)兩邊分別使

用這個(gè)過(guò)程(最容易的方法——遞歸)。

1.快速排序:

#include <iostream.h>

void run(int* pData,int left,int right)

{

int i,j;

int middle,iTemp;

i = left;

j = right;

middle = pData[(left+right)/2]; //求中間值

do{

while((pData[i]<middle) && (i<right))//從左掃描大于中值的數(shù)

i++;

while((pData[j]>middle) && (j>left))//從右掃描大于中值的數(shù)

j--;

if(i<=j)//找到了一對(duì)值

{

//交換

iTemp = pData[i];

pData[i] = pData[j];

pData[j] = iTemp;

i++;

j--;

} [Page]

}while(i<=j);//如果兩邊掃描的下標(biāo)交錯(cuò),就停止(完成一次)

//當(dāng)左邊部分有值(left<j),遞歸左半邊

if(left<j)

run(pData,left,j);

//當(dāng)右邊部分有值(right>i),遞歸右半邊

if(right>i)

run(pData,i,right);

}

void QuickSort(int* pData,int Count)

{

run(pData,0,Count-1);

}

void main()

{

int data[] = {10,9,8,7,6,5,4};

QuickSort(data,7);

for (int i=0;i<7;i++)

cout<<data[i]<<" ";

cout<<"\n";

}

這里我沒有給出行為的分析,因?yàn)檫@個(gè)很簡(jiǎn)單,我們直接來(lái)分析算法:首先我們考慮最理想的情況

1.數(shù)組的大小是2的冪,這樣分下去始終可以被2整除。假設(shè)為2的k次方,即k=log2(n)。

2.每次我們選擇的值剛好是中間值,這樣,數(shù)組才可以被等分。

第一層遞歸,循環(huán)n次,第二層循環(huán)2*(n/2)......

所以共有n+2(n/2)+4(n/4)+...+n*(n/n) = n+n+n+...+n=k*n=log2(n)*n

所以算法復(fù)雜度為O(log2(n)*n)

其他的情況只會(huì)比這種情況差,最差的情況是每次選擇到的middle都是最小值或最大值,那么他將變

成交換法(由于使用了遞歸,情況更糟),但是糟糕的情況只會(huì)持續(xù)一個(gè)流程,到下一個(gè)流程的時(shí)候就很可能已經(jīng)避開了該中間的最大和最小值,因?yàn)閿?shù)組下標(biāo)變化了,于是中間值不在是那個(gè)最大或者最小值。但是你認(rèn)為這種情況發(fā)生的幾率有多大??呵呵,你完全不必?fù)?dān)心這個(gè)問(wèn)題。實(shí)踐證明,大多數(shù)的情況,快速排序總是最好的。

如果你擔(dān)心這個(gè)問(wèn)題,你可以使用堆排序,這是一種穩(wěn)定的O(log2(n)*n)算法,但是通常情況下速度要慢

于快速排序(因?yàn)橐亟M堆)。

三、其他排序

1.雙向冒泡:

通常的冒泡是單向的,而這里是雙向的,也就是說(shuō)還要進(jìn)行反向的工作。

代碼看起來(lái)復(fù)雜,仔細(xì)理一下就明白了,是一個(gè)來(lái)回震蕩的方式。

寫這段代碼的作者認(rèn)為這樣可以在冒泡的基礎(chǔ)上減少一些交換(我不這么認(rèn)為,也許我錯(cuò)了)。

反正我認(rèn)為這是一段有趣的代碼,值得一看。

#include <iostream.h>

void Bubble2Sort(int* pData,int Count)

{

int iTemp;

int left = 1;

int right =Count -1;

int t;

do

{

//正向的部分

for(int i=right;i>=left;i--)

{

if(pData[i]<pData[i-1]) [Page]

{

iTemp = pData[i];

pData[i] = pData[i-1];

pData[i-1] = iTemp;

t = i;

}

}

left = t+1;

//反向的部分

for(i=left;i<right+1;i++)

{

if(pData[i]<pData[i-1])

{

iTemp = pData[i];

pData[i] = pData[i-1];

pData[i-1] = iTemp;

t = i;

}

}

right = t-1;

}while(left<=right);

}

void main()

{

int data[] = {10,9,8,7,6,5,4};

Bubble2Sort(data,7);

for (int i=0;i<7;i++)

cout<<data[i]<<" ";

cout<<"\n";

}

2.SHELL排序

這個(gè)排序非常復(fù)雜,看了程序就知道了。

首先需要一個(gè)遞減的步長(zhǎng),這里我們使用的是9、5、3、1(最后的步長(zhǎng)必須是1)。

工作原理是首先對(duì)相隔9-1個(gè)元素的所有內(nèi)容排序,然后再使用同樣的方法對(duì)相隔5-1個(gè)元素的排序

以次類推。

基本思想:

先取一個(gè)小于n的整數(shù)d1作為第一個(gè)增量,把文件的全部記錄分成d1個(gè)組。所有距離為dl的倍數(shù)的記錄放在同一個(gè)組中(所以d值越小,分組越少,每組的元素越多)。先在各組內(nèi)進(jìn)行直接插人排序;然后,取第二個(gè)增量d2<d1重復(fù)上述的分組和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有記錄放在同一組中進(jìn)行直接插入排序?yàn)橹埂?/P>

該方法實(shí)質(zhì)上是一種分組插入方法。

(備注:增量中最好有基數(shù)也有偶數(shù),所以可以人為設(shè)置)

#include <iostream.h>

int ShellPass(int * array,int d) //一趟增量為d的希爾插入排序

{

int temp;

int k=0;

for(int i=d+1;i<13;i++)

{

if(array[i]<array[i-d])

{

temp=array[i]; [Page]

int j=i-d;

do

{

array[j+d]=array[j];

j=j-d;

k++;

}while(j>0 && temp<array[j]);

array[j+d]=temp;

}

k++;

}

return k;

}

void ShellSort(int * array) //希爾排序

{

int count=0;

int ShellCount=0;

int d=12; //一般增量設(shè)置為數(shù)組元素個(gè)數(shù),不斷除以2以取小

do

{

d=d/2;

ShellCount=ShellPass(array,d);

count+=ShellCount;

}while(d>1);

cout<<"希爾排序中,關(guān)鍵字移動(dòng)次數(shù)為:"<<count<<endl;

}

void main()

{

int data[] = {10,9,8,7,6,5,4,3,2,1,-10,-1};

ShellSort(data);

for (int i=0;i<12;i++)

cout<<data[i]<<" ";

cout<<"\n";

}

算法分析

1.增量序列的選擇

Shell排序的執(zhí)行時(shí)間依賴于增量序列。

好的增量序列的共同特征:

① 最后一個(gè)增量必須為1;

② 應(yīng)該盡量避免序列中的值(尤其是相鄰的值)互為倍數(shù)的情況。

有人通過(guò)大量的實(shí)驗(yàn),給出了目前較好的結(jié)果:當(dāng)n較大時(shí),比較和移動(dòng)的次數(shù)約在nl.25到1.6n1.25之間。

2.Shell排序的時(shí)間性能優(yōu)于直接插入排序

希爾排序的時(shí)間性能優(yōu)于直接插入排序的原因:

①當(dāng)文件初態(tài)基本有序時(shí)直接插入排序所需的比較和移動(dòng)次數(shù)均較少。

②當(dāng)n值較小時(shí),n和n2的差別也較小,即直接插入排序的最好時(shí)間復(fù)雜度O(n)和最壞時(shí)間復(fù)雜度0(n2)差別不大。

③在希爾排序開始時(shí)增量較大,分組較多,每組的記錄數(shù)目少,故各組內(nèi)直接插入較快,后來(lái)增量di逐漸縮小,分組數(shù)逐漸減少,而各組的記錄數(shù)目逐漸增多,但由于已經(jīng)按di-1作為距離排過(guò)序,使文件較接近于有序狀態(tài),所以新的一趟排序過(guò)程也較快。

因此,希爾排序在效率上較直接插人排序有較大的改進(jìn)。

3.穩(wěn)定性

希爾排序是不穩(wěn)定的。

四、基于模板的通用排序:

這個(gè)程序我想就沒有分析的必要了,大家看一下就可以了。不明白可以在論壇上問(wèn)。

MyData.h文件

///////////////////////////////////////////////////////

class CMyData

{

public:

CMyData(int Index,char* strData);

CMyData();

virtual ~CMyData(); [Page]

int m_iIndex;

int GetDataSize(){ return m_iDataSize; };

const char* GetData(){ return m_strDatamember; };

//這里重載了操作符:

CMyData& perator =(CMyData &SrcData);

bool operator <(CMyData& data );

bool operator >(CMyData& data );

private:

char* m_strDatamember;

int m_iDataSize;

};

////////////////////////////////////////////////////////

MyData.cpp文件

////////////////////////////////////////////////////////

CMyData::CMyData():

m_iIndex(0),

m_iDataSize(0),

m_strDatamember(NULL)

{

}

CMyData::~CMyData()

{

if(m_strDatamember != NULL)

delete[] m_strDatamember;

m_strDatamember = NULL;

}

CMyData::CMyData(int Index,char* strData):

m_iIndex(Index),

m_iDataSize(0),

m_strDatamember(NULL)

{

m_iDataSize = strlen(strData);

m_strDatamember = new char[m_iDataSize+1];

strcpy(m_strDatamember,strData);

}

CMyData& CMyData::operator =(CMyData &SrcData)

{

m_iIndex = SrcData.m_iIndex;

m_iDataSize = SrcData.GetDataSize();

m_strDatamember = new char[m_iDataSize+1];

strcpy(m_strDatamember,SrcData.GetData());

return *this;

}

bool CMyData::operator <(CMyData& data )

{

return m_iIndex<data.m_iIndex;

}

bool CMyData::operator >(CMyData& data )

{

return m_iIndex>data.m_iIndex;

}

///////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////

//主程序部分

#include <iostream.h>

#include "MyData.h"

template <class T>

void run(T* pData,int left,int right)

{

int i,j;

T middle,iTemp;

i = left; [Page]

j = right;

//下面的比較都調(diào)用我們重載的操作符函數(shù)

middle = pData[(left+right)/2]; //求中間值

do{

while((pData[i]<middle) && (i<right))//從左掃描大于中值的數(shù)

i++;

while((pData[j]>middle) && (j>left))//從右掃描大于中值的數(shù)

j--;

if(i<=j)//找到了一對(duì)值

{

//交換

iTemp = pData[i];

pData[i] = pData[j];

pData[j] = iTemp;

i++;

j--;

}

}while(i<=j);//如果兩邊掃描的下標(biāo)交錯(cuò),就停止(完成一次)

//當(dāng)左邊部分有值(left<j),遞歸左半邊

if(left<j)

run(pData,left,j);

//當(dāng)右邊部分有值(right>i),遞歸右半邊

if(right>i)

run(pData,i,right);

}

template <class T>

void QuickSort(T* pData,int Count)

{

run(pData,0,Count-1);

}

void main()

{

CMyData data[] = {

CMyData(8,"xulion"),

CMyData(7,"sanzoo"),

CMyData(6,"wangjun"),

CMyData(5,"VCKBASE"),

CMyData(4,"jacky2000"),

CMyData(3,"cwally"),

CMyData(2,"VCUSER"),

CMyData(1,"isdong")

};

QuickSort(data,8);

for (int i=0;i<8;i++)

cout<<data[i].m_iIndex<<" "<<data[i].GetData()<<"\n";

cout<<\n;



來(lái)源:向明天進(jìn)軍0次

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉