کرم های کامپیوتر

کرم های کامپیوتر

کلی مطلب داریم براتون درباره کامپیوتر و برنامه نویسی.

ربات تلگرامی ما
آخرین نظرات
  • ۱ ارديبهشت ۹۶، ۱۱:۰۲ - Farzaneh
    Ubuntu
  • ۲۸ فروردين ۹۶، ۰۱:۳۶ - younes RayanFar
    opensuse


الگوریتم های مرتب سازی آن دسته از الگوریتم هایی هستند که برای مرتب سازی یک مجموعه از اعداد و یا حروف و یا اسامی(با توجه به اینکه هر حرف یک ارزش عددی دارد) استفاده میشود.در این مطلب الگوریتم مرتب سازی حبابی- که از ساده ترین الگوریتم های مرتب سازی استمورد بررسی قرار میگیرد.

الگوریتم مرتب سازی حبابی یک راه حل سر راست  و واضح دارد.این الگوریتم یک مجموعه از اعداد را پیمایش میکند و هر بار عدد فعلی را با عدد بعدی اش مقایسه میکند و در صورتی که از آن بزرگتر باشد جای عدد فعلی با عدد بعدیش عوض میشود.یا اگر بخواهیم مجموعه را به صورت نزولی مرتب کنیم، درصورتی که عدد فعلی کوچکتر از عدد بعدی باشد جایش با آن عوض میشود. الگوریتم بارها و بارها مجموعه را مرتب میکند تا آنکه مجموعه مرتب شود.فهمیدن اینکه مجموعه مرتب شده است نیز به دو روش انجام میشود که بترتیب میتوانید بررسی کنید:

  1. در یک دور پیمایش جابجایی صورت نگیرد.یعنی در آن دور عددی پیدا نشود که از عدد بعدی خود بزرگتر(یا بصورت نزولی کوچکتر) باشد و جایش با عدد بعدیش عوض نشود.
  2. روش دوم که روش من درآوردی است(خودم ساختمش!) این است که یک تابع جدا بنویسید که یکبار مجموعه را از اول تا آخر پیمایش کند و اگر عددی پیدا نشد که از عدد بعدیش بزرگتر باشد پس الگوریتم مرتب است.
روش پیشنهاد شده روش اول است.

بیاید یک مجموعه سه عددی از اعداد را با این الگوریتم مرتب کنیم:

5 3 2

3 2 5

2 3 5

در مجموعه ی بالا در سه مرحله الگوریتم مرتب شد.اعدادی که در هر نوبت جایشان عوض شد پررنگ شده اند.

حال یک مجموعه چهار عضوی را مرتب میکنیم:

54 8 41 8

8 41 8 54

8 8 41 54

باز مجموعه در سه مرحله مرتب شد! اما این به این معنی نیست که همیشه در سه مرحله یک مجموعه مرتب میشود:

456 12 84 4 4 2

12 84 4 4 2 456

12 4 4 2 84 456

4 4 2 12 84 456

4 2 4 12 84 456

2 4 4 12 84 456

تصویر زیر میتواند به شما در درک سریع تر و بهتر این الگوریتم کمک کند(تصویر متحرک است)

 

و مرتب سازی حبابی در زبان های برنامه نویسی مختلف:

C:

//Bubble Sort Algorithm
#include <stdio.h>

void swap(int *a,int *b){
int temp = *a;
*a = *b;
*b = temp;
}

int issorted(int arr[]){
for(int i = 0;i < 10;i++){
if(!(arr[i] <= arr[i+1]))
return 0;
}
return 1;
}

int main(){
int arr[10];
//filling the array
for (int i = 0;i < 10;i++){
printf("\nEnter Element %i: ",i);
scanf("%i",&arr[i]);
}
//showing the array
for (int i = 0;i < 10;i++){
printf("Element #%i is #%i\n",i,arr[i]);
}
printf("Starting sorting...\n");
//sorting the array
while(issorted(arr) == 0){//Until issorted returned 0 that means false
for (int i = 0;i < 10;i++){
if(arr[i] > arr[i+1])
swap(&arr[i],&arr[i+1]);
}
}

در کد بالا تابع swap مقدار دو متغیر عدد صحیح را باهم جابجا میکند و تابع issorted نیز همانطور که از نامش پیداست چک میکند که آرایه مرتب شده است یا خیر.

C#:

//Bubble Sort in CSharp
//Author: Faroogh Karimi Zadeh
using System;

class Program{
    static void Main(){
        int[10] ary;
        for (int i = 0;i<10;i++){
            Console.Write("Enter elemnt #"+i.ToString()+": ");
            ary[i] = (int)Console.ReadLine();
        }
        ary = sort(ary);
    }
    static void swap(ref int a,ref int b){
        int tmp = a;
        a = b;
        b = tmp;
    }
    static int[] sort(int[] ary){
        bool change = true;
        while( change){
        change = false;
            for (int i=0;i<10;i++){
                if (i!=9){
                    if (ary[i]>ary[i+1]){
                        swap(ref ary[i],ary[i+1]);
                        change = true;
                    }
                }
            }
        }
        return ary;
    }
    static void print(int[] ary){
        foreach (int i in ary){
            Console.Write(i.ToString() + ",");
        }
    }
}

C++:

#include<iostream>
using namespace std;

void swap(int *a,int *b);
int[] sort(int arr[]);
void print(int arr[]);

int main(){
    int arr[10];
    for (int i=1;i<10;i++){
        cout << "Enter element #" << i << ": " << endl;
        cin >> arr[i];
    }
    print(arr);
    arr = sort(arr);
    cout << "Sorted: "; 
    print(arr);
}
int[] sort(int arr[]) {
      bool swapped = true;
      int j = 0;
      int tmp;
      while (swapped) {
            swapped = false;
            j++;
            for (int i = 0; i < n - j; i++) {
                  if (arr[i] > arr[i + 1]) {
                        swap(&arr[i],&arr[i+1]);
                        swapped = true;
                  }
            }
      }
      return arr;
}
void print(int arr[]){
    for(int i = 0;i<10;i++){
        cout << arr[i] << ",";
    }
    cout << endl;
}
void swap(int *a,int *b){
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

Python:

def bubbleSort(alist):
for passnum in range(len(alist)-1, 0, -1):
for i in range(passnum):
if alist[i] > alist[i+1]:
alist[i+1], alist[i] = alist[i], alist[i+1]

alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]
bubbleSort(alist)
print(alist)

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

کد ها را در codepad.org وارد کرده و سپس لینک آن را در نظر قرار دهید

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی