Реализации алгоритмов/Сортировка/Пузырьком: различия между версиями
Содержимое удалено Содержимое добавлено
→PHP: оформление |
→JavaScript: оформление |
||
Строка 290: | Строка 290: | ||
== JavaScript == |
== JavaScript == |
||
<source lang="javascript"> |
<big><source lang="javascript"> |
||
function sortBubble(data) { |
function sortBubble(data) { |
||
var tmp; |
var tmp; |
||
Строка 305: | Строка 305: | ||
return data; |
return data; |
||
} |
} |
||
</source> |
</source></big> |
||
== JavaFX == |
== JavaFX == |
Версия от 05:55, 15 мая 2012
Ассемблер
Синтаксис Intel
mov bx, offset array
mov cx, n
for_i:
dec cx
xor dx, dx
for_j:
cmp dx, cx
jae exit_for_j
jbe no_swap
mov ah, byte ptr bx[di]
mov byte ptr bx[di], al
mov byte ptr bx[si], ah
no_swap:
inc dx
jmp for_j
exit_for_j:
loop for_i
Синтаксис AT&T (GNU)
.text
# void bubble_sort (unsigned *array, unsigned length);
.globl bubble_sort
.type bubble_sort, @function
bubble_sort:
mov 8(%esp), %ecx # unsigned length
cmp $1, %ecx
jbe exit
mov 4(%esp), %eax # unsigned *array
dec %ecx
for_ecx:
xor %edi, %edi
for_edi:
mov (%eax,%edi,4), %ebx
cmp %ebx, 4(%eax,%edi,4)
jae no_xchng
mov 4(%eax,%edi,4), %edx
mov %edx, (%eax,%edi,4)
mov %ebx, 4(%eax,%edi,4)
no_xchng:
inc %edi
cmp %edi, %ecx
jne for_edi
loop for_ecx
exit:
ret
C
#define SWAP(A, B) { int t = A; A = B; B = t; }
void bubblesort(int *a, int n)
{
int i, j;
for (i = n - 1; i > 0; i--)
{
for (j = 0; j < i; j++)
{
if (a[j] > a[j + 1])
SWAP( a[j], a[j + 1] );
}
}
}
C++
#include <algorithm>
template< typename Iterator >
void bubble_sort( Iterator First, Iterator Last )
{
while( First < --Last )
for( Iterator i = First; i < Last; ++i )
if ( *(i + 1) < *i )
std::iter_swap( i, i + 1 );
}
C#
void BubbleSort(ref int[] a)
{
for(int i = a.Length - 1 ; i > 0 ; i--)
for(int j = 0 ; j < i ; j++)
if( a[j] > a[j+1] )
{
int tmp = a[j];
a[j] = a[j+1]; {{1}}
a[j+1] = tmp;
}
}
Delphi
Сортировка одномерного динамического целочисленного массива:
type
TIntVec = array of Integer;
...
procedure BubbleSort(var a: TIntVec);
var i,p,n: Integer; b: boolean;
begin
n:= Length(a);
if n < 1 then exit;
repeat
b:= true;
Dec(n);
for i:= 0 to n do
if a[i] > a[i+1] then
begin
p:= a[i];
a[i]:= a[i+1];
a[i+1]:= p;
b:= false;
end;
until b;
end;
D
void bubleSort(int[] array) {
int length = array.length;
for (int i = length - 1; i > 0; --i) {
for (int j = 0; j < i; ++j) {
if (array[j] > array[j + 1]) {
int tmp = array[j + 1];
array[j + 1] = array[j];
array[j] = tmp;
}
}
}
}
Fortran
do i=n-1,1,-1
do j=1,i
if (a(j).gt.a(j+1)) then
t=a(j)
a(j)=a(j+1)
a(j+1)=t
endif
enddo
enddo
Java
void swap(int[] arr, int i, int j) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
void bubblesort(int[] arr){
for(int i = arr.length-1 ; i >= 0 ; i--){
for(int j = 0 ; j < i ; j++){
if( arr[j] > arr[j+1] )
swap(arr, j, j+1);
}
}
}
Pascal
for i:=n-1 downto 1 do {n - размер массива M[]}
for j:=1 to i do
if M[j]>M[j+1] then
begin
tmp:= M[j];
M[j]:= M[j+1];
M[j+1]:= tmp;
end;
write('вывод значений M[]: ');
for i:=1 to n do
write(M[i]:4);
writeln;
Усовершенствованный алгоритм сортировки пузырьком:
P:=True; {есть перестановка?}
K:=1; {Номер просмотра}
While P Do
Begin
P:=false;
For i:=1 To n-k Do
If X[i] > X[i+1] Then
Begin
A:=X[i];
X[i]:=X[i+1];
X[i+1]:=A;
P:=true;
End;
k:=k+1;
End;
Perl
sub bulb
{
for ( $i = 1; $i < @_; $i++ )
{
for ( $j = 0; $j < $#_; $j++ )
{
if ( $_[$j] > $_[$j+1] )
{
@_[$j, $j+1] = @_[$j+1, $j];
}
}
}
return @_;
Ruby
arr = [5, 20, 3, 11, 1, 17, 3, 12, 8, 10]
swap = true
size = arr.length - 1
while swap
swap = false
for i in 0...size
swap |= arr[i] > arr[i + 1]
arr[i], arr[i+1] = arr[i + 1], arr[i] if arr[i] > arr[i + 1]
end
size -= 1
end
puts arr.join(' ')
# output => 1 3 3 5 8 10 11 12 17 20
Python
def swap(arr, i, j):
arr[i], arr[j] = arr[j], arr[i]
def bubble_sort(arr):
i = len(arr)
while i > 1:
for j in xrange(i - 1):
if arr[j] > arr[j + 1]:
swap(arr, j, j + 1)
i -= 1
VBA
Sub Sort(Mus() As Long)
Dim i As Long, tmp As Long, t As Boolean
t = True
Do While t
t = False
For i = 0 To UBound(Mus()) - 1
If Mus(i) > Mus(i + 1) Then
tmp = Mus(i)
Mus(i) = Mus(i + 1)
Mus(i + 1) = tmp
t = True
End If
Next
Loop
End Sub
PHP
$size = sizeof($arr)-1;
for ($i = $size; $i>=0; $i--) {
for ($j = 0; $j<=($i-1); $j++)
if ($arr[$j]>$arr[$j+1]) {
$k = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $k;
}
}
JavaScript
function sortBubble(data) {
var tmp;
for (var i = data.length - 1; i > 0; i--) {
for (var j = 0; j < i; j++) {
if (data[j] > data[j+1]) {
tmp = data[j];
data[j] = data[j+1];
data[j+1] = tmp;
}
}
}
return data;
}
JavaFX
function bubbleSort(seq:Number[]):Number[]{
var sort = seq;
var elem:Number;
for(n in reverse [0..sizeof seq - 2]){
for(i in [0..n] ){
if(sort[i+1] < sort[i] ){
elem = sort[i];
sort[i] = sort[i+1];
sort[i+1] = elem;
}
}
}
return sort;
}
Nemerle
using System.Console;
using Nemerle.Collections;
def arr = array [100, 45, 2, 5, 3, 122, 3, 5, 6, 1, 3];
foreach (i in [0..arr.Length-1])
foreach (j in [0..arr.Length-2])
when (arr[j] > arr[j+1])
(arr[j], arr[j+1]) = (arr[j+1], arr[j]);
WriteLine($"Sorted list is a $(arr.ToList())");