您的位置:首页 > 其它

排序算法总结

2009-09-03 22:37 369 查看
1 选择排序

选择排序的思想是依次从待排序数列中选择最大(小)的、第二大(小)的等等,然后依次重新排列为有序数列。

void SelectionSort(int a[], int n)

{

    int i,j,min,temp;

    for(int i =0; i< n-1; i++){

        min = i;

        for(j = i+1; j<n;j++){

            if(a[i]>a[j]){

                min = j;

            }

        }

        if(min != i){

            temp = a[min];

            a[min] = a[i];

            a[i] = temp;

        }

    }



时间复杂度O(n^2);

 

2 归并排序   

void Merge(int a[], int left, int mid, int right)

{

    int begin1,end1,begin2,end2;

    begin1 = left;

    end1 = mid;

    begin2 = mid+1;

    end2 = right;

    int *temp = new int[right-left+1];

    int k=0;

    while(begin1<end1 && begin2<end2)

    {

        if(a[begin1]<a[begin2]{

            temp[k] = a[begin1];

            begin1++;

       }

       else{

            temp[k] = a[begin2];

            begin2++;

        }

        k++;

    }

 

    while(begin1<=end1){

        temp[k++] = a[begin1++];

    }

    while(begin2<=end2){
         temp[k++]= a[begin2++];
    }

    for(int i=0; i< right-left+1; i++){
         a[left+i] = temp[i];
    }

}   

void MergeSort( int a[], const int first, const int last)

{

    int min = 0;

    if(first<last)

    {

        mid = (first+last)/2;

        MergeSort(a, first, mid);

        MergeSort(a, mid+1, last);

        Merge(a, first, mid, last);

    }

}

3 插入排序

void InsertionSort(int a[], int n)

{

    int i,j;

    int key;

    for(i = 1; i< n; i++){

        key = a[i];

        j = i-1;

        while(j>=0 && a[j]<key){

            a[j+1] = a[j];

            j--;

        }

        a[j+1] = key;

    }

}    

 

void InsertionSort1(int a[], int n)
{
    int i, j;
    int key;
    for(i=1; i<n; i++){
        if(a[i] <a[i-1]){
            key= a[i];
            for(j=i-1; key<a[j];j--){
                a[j+1] = a[j];
            }
        a[j+1]=key;
        }
    }
}

 

void BiInsertSort(int a[], int n)
{
 int i,j;
 int key;
 int low, high;
 for(i = 1; i<n; i++){
  key = a[i];
  low=0; high= i-1;
  while(low<=high){
   int m = (high-low)/2+1;
   if(key<a[m])
    high = m;
   else
    low = m+1;
  }

  for(j = i-1; j>=high+1 && a[j]>key; j--){
   a[j+1]=a[j];
  }
  a[j+1]=key;

 }
}  

 

4 冒泡排序

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]);
  }
 }
 
}

void BubbleSort1( int a[], int n)
{
 int i,j;
 bool change;
 for(i = 0; i<n; i++){
  change =false;
  for(j=n-2; j>=i; j--){
   if(a[j+1]<a[j]){
    swap(a[j], a[j+1]);
    change = true;
   }
  }
  if(!change)
   return;
 }
}

 

5 快速排序

6 堆排序

7 计数排序

8 基数排序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 merge