مرتب سازی (Merge Sort)

مرتب سازی (Merge Sort)

//Function to merge two pre-sorted arrays
void MergeSort(apvector &arrayA, apvector &arrayB, apvector &arrayC)
{
     int indexA = 0;     // initialize variables for the subscripts
     int indexB = 0;
     int indexC = 0;

     while((indexA < arrayA.length( )) && (indexB < arrayB.length( ))
     {
          if (arrayA[indexA] < arrayB[indexB])
          {
                 arrayC[indexC] = arrayA[indexA];
                 indexA++;    //increase the subscript
          }
         else
         {
                 arrayC[indexC] = arrayB[indexB];
                 indexB++;      //increase the subscript
         }
        indexC++;      //move to the next position in the new array
     }
     // Move remaining elements to end of new array when one merging array is empty
     while (indexA < arrayA.length( ))
     {
           arrayC[indexC] = arrayA[indexA];
           indexA++;
           indexC++;
     }
     while (indexB < arrayB.length( ))
     {
           arrayC[indexC] = arrayB[indexB];
           indexB++;
           indexC++;
     }
     return;
}

 

مرتب سازی سریع (Quick Sort)

مرتب سازی (Quick Sort)

 

 
Array at beginning:  84 69 76 86 94 91
 
= 1st partition
86 94 91 84 69 76
 
= 2nd partition
94 91 86 84 69 76
  94 91 86 84 69 76
  94 91 86 84 69

76

Done: 94 91 86 84 76 69

//Quick Sort Functions for Descending Order
// (2 Functions)

void QuickSort(apvector &num, int top, int bottom)
{
     
// top = subscript of beginning of array
      // bottom = subscript of end of array
     

    
int middle;
     if (top < bottom)
    {
          middle = partition(num, top, bottom);
          quicksort(num, top, middle);  
// sort first section
          quicksort(num, middle+1, bottom);   
// sort second section
     }
     return;
}
//Function to determine the partitions
// partitions the array and returns the middle subscript

int partition(apvector &array, int top, int bottom)
{
     int x = array[top];
     int i = top - 1;
     int j = bottom + 1;
     int temp;
     do
     {
           do     
           {
                  j - -;
           }while (x >array[j]);

          do  
         {
                 i++;
          } while (x

          if (i < j)
         { 
                 temp = array[i];   
                 array[i] = array[j];
                 array[j] = temp;
         }
     }while (i < j);    

     return j;           // returns middle subscript 
}

مرتب سازی (Shell Sort)

مرتب سازی (Shell Sort)

Array at beginning:  84 69 76 86 94 91 d
After Pass #1: 86 94 91 84 69 76 3
After Pass #2: 91 94 86 84 69 76 2
After Pass #3: 94 91 86 84 76 69 1
After Pass #4 (done): 94 91 86 84 76 69 1

First Pass:  d = (6 + 1) / 2 = 3.  Compare 1st and 4th , 2nd and 5th, and 3rd and 6th items since they are  3 positions away from each other))
Second Pass:  value for d is halved  d = (3 + 1) / 2 = 2.  Compare items two places away such as 1st and 3rd
Third Pass:  value for d is halved  d = (2 + 1) / 2 = 1.  Compare items one place away such as 1st and 2nd ..
Last Pass:  sort continues until d = 1 and the pass occurs without any swaps.

This sorting process, with its comparison model, is an efficient sorting algorithm.

//Shell Sort Function for Descending Order
void ShellSort( apvector &num)
{
     int i, temp, flag = 1, numLength = num.length( );
     int d = numLength;
     while( flag || (d > 1))      // boolean flag (true when not equal to 0)
     {
          flag = 0;           // reset flag to 0 to check for future swaps
          d = (d+1) / 2;
          for (i = 0; i < (numLength - d); i++)
        {
               if (num[i + d] > num[i])
              {
                      temp = num[i + d];      // swap positions i+d and i
                      num[i + d] = num[i];
                      num[i] = temp;
                      flag = 1;                  // tells swap has occurred
              }
         }
     }
     return;

 

 

مرتب سازی (Insertion Sort)

مرتب سازی (Insertion Sort)

Array at beginning: 

84 69 76 86 94 91
 
= 1st sub-array
84 69 76 86 94 91
 
= 2nd sub-array
84 69 76 86 94 91
  84 76 69 86 94 91
  86 84 76 69 94 91
  94 86 84 76 69 91

2nd sub-array empty

94 91 86 84 76 69

// Insertion Sort Function for Descending Order
void InsertionSort( apvector &num)
{
     int i, j, key, numLength = num.length( );
     for(j = 1; j < numLength; j++)    // Start with 1 (not 0)
    {
           key = num[j];
           for(i = j - 1; (i >= 0) && (num[i] < key); i--)   // Smaller values move up
          {
                 num[i+1] = num[i];
          }
         num[i+1] = key;    //Put key into its proper location
     }
     return;
}

 

الگوریتم مرتب سازی (Selection Sort)

مرتب سازی (Selection Sort)

Array at beginning:  84 69 76 86 94 91
After Pass #1: 84 91 76 86 94 69
After Pass #2: 84 91 94 86 76 69
After Pass #3:  86 91 94 84 76 69
After Pass #4:  94 91 86 84 76 69
After Pass #5 (done):  94 91 86 84 76 69


// Selection Sort Function for Descending Order
void SelectionSort(apvector &num)
{
      int i, j, first, temp;
      int numLength = num.length( );
      for (i= numLength - 1; i > 0; i--)
     {
           first = 0;                 // initialize to subscript of first element
           for (j=1; j<=i; j++)   // locate smallest between positions 1 and i.
          {
                 if (num[j] < num[first])
                 first = j;
          }
         temp = num[first];   // Swap smallest found with element in position i.
         num[first] = num[i];
         num[i] = temp;
     }
     return;
}

 

مرتب سازی به روش (Exchange Sort)

مرتب سازی (Exchange Sort)

Array at beginning:  84 69 76 86 94 91
After Pass #1: 94 69 76 84 86 91
After Pass #2: 94 91 69 76 84 86
After Pass #3:  94 91 86 69 76 84
After Pass #4:  94 91 86 84 69 76
After Pass #5 (done):  94 91 86 84 76 69


//Exchange Sort Function for Descending Order
void ExchangeSort(apvector &num)
{
     int i, j;
     int temp;   // holding variable
     int numLength = num.length( ); 
     for (i=0; i< (numLength -1); i++)    // element to be compared
    {
          for(j = (i+1); j < numLength; j++)   // rest of the elements
         {
                if (num[i] < num[j])          // descending order
               {
                        temp= num[i];          // swap
                        num[i] = num[j];
                        num[j] = temp;
               }
          }
     }
     return;
}

 

 

مرتب سازی حبابی (Bubble Sort)

الگوریتم مرتب سازی حبابی

// Bubble Sort Function for Descending Order 
void BubbleSort(apvector &num)
{
      int i, j, flag = 1;    // set flag to 1 to start first pass
      int temp;             // holding variable
      int numLength = num.length( ); 
      for(i = 1; (i <= numLength) && flag; i++)
     {
          flag = 0;
          for (j=0; j < (numLength -1); j++)
         {
               if (num[j+1] > num[j])      // ascending order simply changes to <
              { 
                    temp = num[j];             // swap elements
                    num[j] = num[j+1];
                    num[j+1] = temp;
                    flag = 1;               // indicates that a swap occurred.
               }
          }
     }
     return;   //arrays are passed to

Array at beginning:  84 69 76 86 94 91
After Pass #1: 84 76 86 94 91 69
After Pass #2:  84 86 94 91 76 69
After Pass #3:  86 94 91 84 76 69
After Pass #4: 94 91 86 84 76 69
After Pass #5 (done):  94 91 86 84 76 69

وبگردی امن با فایرفاکس

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

 

در این مقاله تنظیمات امنیتی فایرفاکس و افزونه های مورد نیاز آموزش داده شده اند.

 

قبل از شروع کار بهتر است آخرین نسخه فایرفاکس را بر روی کامپیوتر خود نصب کنید.

می توانید آن را با حجمی حدود ۷.۷ مگابایت از اینجا دریافت کنید.
پس از نصب فایر فاکس به افزونه های زیر هم نیاز دارید که باید بر روی فایرفاکس نصب گردند. با کلیک بر روی هر یک آخرین نسخه آن ها را از سایت فایرفاکس بارگذاری و بر روی فایرفاکس خود نصب نمایید.

 

افزونه FormFox

افزونه Petname

افزونه FireGPG

 

البته یکی دیگر از بهترین و کاربردی ترین افزونه های امنیتی فایرفاکس NoScript است که در مقاله‌ای دیگر به آن خواهیم پرداخت.

 

۱.۱.مواردی که شما باید قبل از شروع بدانید

در این مطلب فرض بر این است که شما می توانید از یک مرورگر استفاده کنید و توضیح اضافی ای درباره نحوه استفاده از مرورگر فایرفاکس نخواهیم داشت. توضیحات این مطلب در مورد چگونگی امن تر کردن فایرفاکس با استفاده از ابزارهای خاص است.

 مطالعه ادامه مطلب در آدرس اصلی: http://www.negahbaan.com/article/2009/dec/294

مقدمه ای بر تست امنیتی وب سایت ها

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

 همانطور که نرم افزار تحت وب مان را می نویسیم آن را برای کارکرد صحیح تست می کنیم. اما برای امنیت چه کنیم؟

 در تست امنیتی ما موارد مختلفی توجه می‌کنیم برای مثال ورودی های غیر قابل قبول را تست می کنیم. سعی می کنیم با وارد کردن مقادیر بینهایت و غیر معمول کاری کنیم تا نرم افزار را از کارکرد درست خود خارج کنیم. اما در ابتدا لازم است که بدانیم که نیازهای امنیتی ما چیست؟ و به چه نوع تست هایی نیازمندیم؟

 این کار ساده ای نیست. اما با کمی فکر و منطق می توان به نتیجه ای درست رسید. باید بدانید که شروع این مسیر کمی مشکل است اما وقتی که گام های اول را بردارید بقیه راه برایتان هموارتر خواهد بود.

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

 

ادامه مطلب در وب سایت اصلی: http://www.negahbaan.com/article/2009/dec/293