求高手幫忙,c 陣列排序後怎麼輸出原先編號

時間 2021-07-21 03:43:39

1樓:匿名使用者

1.你把陣列的下標也儲存到一個結構體陣列中,對原陣列進行排序的同時,也對那個臨時陣列進行同樣的調換,等目標陣列排序好,你的下標陣列自然也排好了。

2.例如:

struct

;排序後的index依然不變。參考**:

#include

#include

#include

#include

#include

#include

#include

using namespace std;

struct elementarray[10];

int compare(const void *a, const void *b)

int main()

;for (size_t i = 0; i < sizeof(input)/sizeof(input[0]); i++)

qsort(array, sizeof(input)/sizeof(input[0]), sizeof(array[0]), compare);

for (size_t i = 0; i < sizeof(input)/sizeof(input[0]); i++)

cout << array[i].data << "\t" << array[i].index << endl;

return 0;

}1 3

12 2

33 7

55 8

56 1

99 4

99 9

234 6

812 10

1000 5

2樓:匿名使用者

你把陣列的下標也儲存到一個臨時陣列中,對原陣列進行排序的同時,也對那個臨時陣列進行同樣的調換,等目標陣列排序好,你的下標陣列自然也排好了。你如過需要**+20分我給你寫,這個是最簡單的方法。

3樓:匿名使用者

我來晚了,雨落深山的方法是個既簡單又好用的的方法.

4樓:世鑲柳

看你陣列怎麼定義了,最好結構題陣列,例如:

struct

;排序後的index依然不變。參考**:

[95@~]$ cat test.cpp

#include

#include

#include

#include

#include

#include

#include

using namespace std;

struct elementarray[10];

int compare(const void *a, const void *b)

int main()

;for (size_t i = 0; i < sizeof(input)/sizeof(input[0]); i++)

qsort(array, sizeof(input)/sizeof(input[0]), sizeof(array[0]), compare);

for (size_t i = 0; i < sizeof(input)/sizeof(input[0]); i++)

cout << array[i].data << "\t" << array[i].index << endl;

return 0;

}[96@~]$ g++ -wall test.cpp

[97@~]$ ./a.out

1 312 2

33 7

55 8

56 1

99 4

99 9

234 6

812 10

1000 5

[98@~]$

5樓:匿名使用者

雨落深山的辦法非常好用。

6樓:匿名使用者

這個要具體看你的數字和陣列元素的多少

要是數字不太大,並且陣列元素不是很多你就可以用移位計算

要是陣列元素數字很大或是有很多元素就要用二維陣列或是結構了

二維陣列的第一行為原陣列,第二行為序號

如:a[2][n]的陣列其中a[0]為原陣列a[1]編號

交換時就要

int ntemp;

for (int i=0;ia[0][j]) }

排完後輸出a[1]就可以,上面的排序只是說明一下你也可以換為比較快速的方法

結構也是一樣的要兩個元素,一個是 數值,一個是 編號

(這個原理很簡單,基本上和上面的一樣,就不多說了)

可是在c++中,要是32位機int是4位元組的大多的數字是不會超過大小的所以這個你可能會用到的

你的陣列是int na[n];的一個陣列,

元素不超過256個,元素的數值大小不大於2^23

或是 元素不超過65536個,元素的數值大小在-32767~32768之間

為了方便我只說元素不超過256個,元素的數值大小不大於2^23 一個情況了,後面的和這個一樣,你可以改一下就好了(0=-2^23時可以這樣)

注:這個方法不支援有重複的數字的隨機輸出,就是你要是有兩個相同的數,先出現的一定會排前面

for(int i=0;ina[j]) }

} //然後是輸出,你可以這樣(只輸出後8位)

for(int i=0;i

cout<<(na[i]&0xff)<

這樣就可以了

7樓:匿名使用者

#include

using namespace std;

void main()

;int b[10];

int i,j,k;

for(i=k=0;i<10;i++)

a[k]+=1000000;

b[i]=k;

}for(i=0;i<10;i++)

for(i=0;i<10;i++)

//還原a陣列}

求檢查c++程式:輸入一串陣列,輸出排序後陣列和每個數對應序號

8樓:萢萢

如果你用vc++6.0的話這個程式會報錯,因為vc++6.0不支援cin >> n;

int a[n];

int z[n];

這種陣列宣告定義的方式,如果你使用c-free 5的話,不會報錯。

9樓:

cin >> n;

int a[n];

int z[n];

這顯然是錯誤的。宣告陣列,內必須是常量,不能用變數。如果陣列大小由輸入確定,那得用動態方式。

用c++對一組資料排序並輸出每個元素在原陣列中的下標

10樓:匿名使用者

修改如上!

while迴圈有點問題,還有new了之後要delete,main需要return。基本上就這些吧。。。

c++陣列排序怎麼返回數值在原陣列中的下標

11樓:小小司同學

直接用multimap

key放資料,value放下標

一個整型無序陣列裡的數進行順序排序後,如何能輸出數的原下標(用c或者c++)

12樓:天枰非官

#include

using namespace std;

int n;

pair a[233];

int main()

sort(a+1,a+n+1);

for (int i=1;i<=n;i++) printf("%d ",a[i].second);}

excel陣列數值查詢,求高手幫忙

hi列同原公式,陣列公式 f2,row 1 9 row 1 9 10 9 row 1 9 0 0 i2 if countif b2 f2,0 9 1,row 1 9 10 9 row 1 9 0 0 j2普通公式 k2和原來的類似,只是位置和數字稍稍變化下,依然是陣列公式 if j2 min if ...

求高手幫忙編個程式C 的謝謝了

看到你的補充,我忍不住也想補句 要不要幫你把書也讀了或者是班也上了啦?count 這個題目說白了就,就是定義一個兩維float陣列a 10 2 一個一維string陣列city 10 存放相應的城市名 a i 0 某城住房總數 讓使用者賦值,或者程式隨機產生a i 1 某城家庭總數 同上 對a i ...

求高手幫忙寫個c語言寫的51程式

科技藝術生活 為什麼要用24c02儲存,要求上電回零,即初始化了,那麼24c02不就沒有用了麼,再說了,許多微控制器自帶eeprom 你這用stc15f104 8腳 微控制器就可以了, 超級 在梯形圖中,將y0和y1的常閉觸點分別與對方的線圈串聯,可以保證它們不會同時為on,因此km1和km2的線圈...