Другие языки программирования и технологии
(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;
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;
или вот так:
#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;
}
#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;
}
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;
}
ну вот так
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;
}
ну вот так
int tmp - временная переменная для промежуточных данных, можно без нее но это уже извращение, #define N 1000 - объявляет константу - размер массива, можно ее удалить и везде заменить N на 1000 в остальном код тривиален...
Похожие вопросы
- Программка c# нужна помощь
- Нужна помощь в создании pdf файлов для печати в типографии через photoshop или его аналоги!
- Здравствуйте, нужна помощь в создании игр. Крик души.
- c++ нужна помощь
- C++ Нужна Помощь
- Язык Arduino(C, C++) Нужна помощь: в изучении arduino встретил знак "&" помогите, пожалуйста, что он означает!
- Ребята, нужна помощь в создании сайта. Задача: сайт посвященный косметике, желательно шаблон на DLE, Joomla. Подробнее .
- c++ нужна помощь )
- Прошу прощения, мне очень нужна помощь по созданию сайта
- C#. Нужна помощь.