Другие языки программирования и технологии

(C++) Нужна помощь в создании метода "пузырька".

- - --- Весь интернет обыскал но не нашёл понятной записи этого метода. Работаю на Dev C++. Самый похожий код который нашёл, это вот: #include<stdio.h> #define N 1000 int main() { int n, i, j; int a[N]; // считываем количество чисел n scanf("%d", &n); // считываем n чисел for(i = 0 ; i < n; i++) { scanf("%d", &a); } for(i = 0 ; i < n ; i++) { // сравниваем два соседних элемента. for(j = 0 ; j < n - i - 1 ; j++) { if(a[j] > a[j+1]) { // если они идут в неправильном порядке, то // меняем их местами. int tmp = a[j]; a[j] = a[j+1] ; a[j+1] = tmp; } } } } А можно как-то записать это не используя #define и tmp? Надеюсь на помощь опытных программистов. Заранее спасибо!
Держи. И без N, и без tmp :)
int n, i, j;
int *a;
// считываем количество чисел n
scanf("%d", &n);

a = new int [ n ];

// считываем n чисел
for(i = 0 ; i < n; i++)
{
scanf("%d", &a[ i ]);
}

for(i = 0 ; i < n ; i++)
{
// сравниваем два соседних элемента.
for(j = i + 1 ; j < n ; j++)
{
if( a[ i ] > a[ j ] )
{
// если они идут в неправильном порядке, то
// меняем их местами.
a[ j ] ^= a[ i ];
a[ i ] ^= a[ j ];
a[ j ] ^= a[ i ];
}
}
}

// выводим n чисел
for(i = 0 ; i < n; i++)
{
printf("%d\n", a[ i ]);
}

delete [] a;
ТА
Тахир Амирасланов
1 320
Лучший ответ
или вот так:

#include <iostream>
#include <stdlib.h>
using namespace std;
void sort(int* a,int N)
{
for(int i=0;i < N;i++) for(int j=i;j < N;j++) if(a[ i ] > a[ j ]) a[ i ]=a[ i ]^a[ j ], a[ j ]=a[ i ]^a[ j ], a[ i ]=a[ i ]^a[ j ];
}

void main()
{
int i,N;
cout << "N="; cin >> N;
int* p=new int[N];
for(i=0;i < N;p[ i ]=100-rand() % 201,cout << p[ i++ ] << ' '); cout << endl;
sort(p,N);
for(i=0;i < N;cout << p[ i++ ] << ' ') ; cout << endl;
delete [] p;
}
ИЛ
Игорь Лакин
76 473
key=true;//лишняя операция но чтоб быть уверенным
int i=0;
float(или какой у вас там тип) buffer=0;
while(key){
key=false;
if(mass [ i ] >mass [ i+1 ]){
buffer=mass [ i ];
mass [ i ]= mass [ i+1 ];
mass [ i+1 ]= buffer;
key=true;
}
i++;
if ( i > mass_length) i=0;
}
ну вот так
Вадим Чабан
Вадим Чабан
35 594
int tmp - временная переменная для промежуточных данных, можно без нее но это уже извращение, #define N 1000 - объявляет константу - размер массива, можно ее удалить и везде заменить N на 1000 в остальном код тривиален...