全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:965
推到 Plurk!
推到 Facebook!

請問「以特定位置資料為關鍵字來排序」的問題~

答題得分者是:brook
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-25 14:46:47 IP:210.66.xxx.xxx 未訂閱
請教各位前輩~    小弟有個文件檔,如下: a21451A01E4E56FFE442A742A742A74EB900514102FF a21451A07E202EFFE408000000674060200C6E100092 a21451A08EFFF0660C2F2EFFF44EB90051A1E8600A70 a21451A09E486EFFF04EB90051A318588F486EFFF018 a21451A0AE42A7487800012F3900517CAE4EB9005167 a21451A0BE40724FEF00104A8067C2202EFFE4080010 a21451A0CE0002670C4EB90051A5D44EB90051C4309A a21451A0DE202EFFE408000001671042A74EB900512A a21451A0EEB7CA588F4EB90051BE80202EFFE40800D5 a21451A0FE000C672220790052014E0010000248795A a21451A10E005201FC48782000487801004EB90051A3 a21451A11E41384FEF000C202EFFE40800000D672E3D a21451A12E20790052014E021000FD4239005184DE54 a21451A13E4879005201FC48781000700030390052B0 a21451A02E4FEF000C486EFFE442A7487800022F3CD3 a21451A03E000080004EB9005140184FEF00104EB937 a21451A04E0051DF72486EFFEC4878000448780040A5 a21451A05E4EB90051413E4FEF000C486EFFE848781E a21451A06E0002487800014EB90051413E600001424F a21451A14E02062F004EB9005141384FEF000C202E0B a21451A18E0800000F672E207900520152021000FD72    每一行都是一筆資料,而我想以每筆資料的5~10個字為關鍵字,如: a21451A01E4E56FFE442A742A742A74EB900514102FF 來做排序的依據,由小排至大,這個關鍵字決不會重覆出現在別的行。 我本來的已有個排序的方法,是用選擇排序法, 但是當行數到達近萬筆的時候,時間複雜度是很可怕的, 所以想另尋高解,來請教各位前輩,煩請多多指教~ 國泰平安
brook
資深會員


發表:57
回覆:323
積分:371
註冊:2002-07-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-25 15:44:47 IP:218.160.xxx.xxx 未訂閱
不知道會不會比較快?     
 
//---------------------------------------------------------------------------
#include 
#include 
#include 
#include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;    TStringList *Ls;    //---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------    int sort_function( const void *a, const void *b)
{
  char *p1 = Ls->Strings[*(int*)a].c_str();
  char *p2 = Ls->Strings[*(int*)b].c_str();      p1  = 4;
  p2  = 4;      return( strncmp(p1,p2,6));
}    void __fastcall TForm1::Button1Click(TObject *Sender)
{
 Ls = new TStringList();
 int *p;     Ls->LoadFromFile("C:\\T\\SORT.TXT");
 p = new int[Ls->Count];
 for (int i=0;iCount;i  ) p[i]=i;     qsort((void *)p, Ls->Count, sizeof(int), sort_function);     TStringList *Ls2 = new TStringList();
 for (int i=0;iCount;i  )
 {
   Ls2->Add(Ls->Strings[p[i]]);
 }
 Ls2->SaveToFile("C:\\T\\SORT2.TXT");
 delete Ls2;     delete Ls;
 delete p;
}
//---------------------------------------------------------------------------
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-25 16:21:01 IP:210.66.xxx.xxx 未訂閱
brook大哥不虧為C++的高手!!! 小弟深感佩服!!讚!!    提升的速度真是令人無法想像,就好像是用UltraEdit的advance sort一樣,謝謝 國泰平安
Albertz
初階會員


發表:2
回覆:57
積分:31
註冊:2002-09-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-25 16:43:29 IP:211.20.xxx.xxx 未訂閱
請容小弟狗尾續貂一下. Borland Team B 在 http://www.bcbdev.com/articles/suggest.htm 有發表一份 "The TeamB guide to avoiding common mistakes in C Builder", 其中一段 "Don't store the result of AnsiString::c_str()". 請務必參考.
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-25 18:09:25 IP:210.66.xxx.xxx 未訂閱
Albertz兄提供的這個網頁真是個大寶庫阿,    裡面寫著不少好東西,感謝分享!!! 國泰平安
系統時間:2024-06-26 11:03:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!