[英]C++ Bubble Sort, how to ignore the same numbers
我正在使用冒泡排序按從低到高的順序對數組中的數字進行排序。 但是有些數字是相同的,但是我不需要將它們打印兩次。 那么,如何檢查它是否已經打印並且不重復操作?
冒泡排序:
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
if(m[i]>m[j]){
temp=m[i];
m[i]=m[j];
m[j]=temp;
}
}
}
由於在打印時已經對編號進行了排序,因此您可以存儲上次打印的編號,並在打印之前與該編號進行比較。
就像是:
std::cout << m[0] << std::endl;
int last_print = m[0];
for(int i = 1; i < n; ++i)
{
if(m[i] != last_print)
{
std::cout << m[i] << std::endl;
last_print = m[i];
}
}
打印時過濾掉重復項(假設m為int [])
int last = 0;
for(int i=0;i<n;i++){
int num = m[i];
if (i == 0 || last != num) {
// print num;
}
last = num;
}
或者這樣,如果您不喜歡太多的變量
for(int i=0;i<n;i++){
if (i == 0 || m[i - 1] != [i]) {
// print m[i];
}
}
或者,您可以刪除重復項
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;){
if (m[i]==m[j]) { // remove
m [j] = m [n - 1]; // replace with last
n --; // cut last
} else {
if(m[i]>m[j]){
temp=m[i];
m[i]=m[j];
m[j]=temp;
}
j ++;
}
}
}
您可以在打印后立即將其添加到std::set
中,並在打印之前檢查所有數字是否在集合中。
編輯:我錯過了數字排序的限制。 在那種情況下,一個set
比僅僅跟蹤最后打印的數字以及僅打印與之不同的數字要大得多,效率也較低。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.