美文网首页
常见排序算法代码集锦

常见排序算法代码集锦

作者: juexin | 来源:发表于2017-01-18 10:47 被阅读0次

冒泡排序

#include<iostream>
using namespace std;
void BubbleSort1(int *a,int n)
{
     int i,j;
     for(i=0;i<n;i++)
     {
          bool flag=false;
          for(j=0;j<n-i-1;j++)
          {
               if(a[j]>a[j+1])
               {
                    int temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                    flag=true;
               }
          }
          if(!flag)
               return;
    }
}
int main()
{
     int k;
     int a[10]={5,7,9,2,1,0,4,8,3,6};
    BubbleSort1(a,10);
     for(k=0;k<10;k++)
          cout<<a[k]<<" ";

     return 0;
}

快速排序

#include<iostream>
using namespace std;
int partation(int *a,int low,int high)
{
     int pivot=a[low];
     while(low<high)
     {
          while(low<high&&a[high]>=pivot)
               high--;
          a[low]=a[high];
          while(low<high&&a[low]<=pivot)
                  low++;
          a[high]=a[low];

     }
     a[low]=pivot;
     return low;
}

void quickSort(int *a,int low,int high)
{
     if(low<high)
     {
       int index=partation(a,low,high);
       quickSort(a,low,index-1);
       quickSort(a,index+1,high);
     }
}

int main()
{
     int k;
     int a[10]={9,3,0,5,4,7,8,2,1,6};
     quickSort(a,0,9);
     for(k=0;k<10;k++)
          cout<<a[k]<<" ";
     return 0;
}

归并排序

#include<iostream>
using namespace std;
void Merge(int *data,int low,int mid,int high);
void MergeSort(int *data,int low,int high)
{
     if(low<high)
     {
          int mid=(low+high)/2;
          MergeSort(data,low,mid);
          MergeSort(data,mid+1,high);
          Merge(data,low,mid,high);
     }
}
void Merge(int *data,int low,int mid,int high)  //high取9,让其取等号
{
     int i=low;
     int j=mid+1;
     int k=0;
     int *array=new int[high-low+1];

     while(i<=mid&&j<=high)
     {
          if(data[i]<data[j])
               array[k++]=data[i++];
          else
               array[k++]=data[j++];
     }
     while(i<=mid)
          array[k++]=data[i++];
     while(j<=high)
          array[k++]=data[j++];
     for(k=0,i=low;i<=high;k++,i++)
          data[i]=array[k];
}
int main()
{
     int t;
     int a[10]={7,4,2,3,1,9,0,5,6,8};
     MergeSort(a,0,9);
     for(t=0;t<10;t++)
          cout<<a[t]<<" ";
     return 0;
}

堆排序

#include <iostream>
using namespace std;
void MinHeapFixdown(int a[],int i,int n);
void MakeMinHeap(int a[],int n)
{
    for(int i=n/2-1;i>=0;i--)
        MinHeapFixdown(a,i,n);
}
void MinHeapFixdown(int a[],int i,int n)
{
    for(int j=2*i+1;j<n;j=2*j+1)
    {
        if(j+1<n&&a[j+1]<a[j])
            j++;
        if(a[j]>=a[i])
            break;
        else
        {
           swap(a[i],a[j]);
           i = j;
        }

    }
}
void Minheapsort(int a[],int n)
{
    for(int i=n-1;i>0;i--)
    {
        swap(a[i],a[0]);
        MinHeapFixdown(a,0,i);
        cout<<a[0]<<" "<<endl;
    }
}
int main()
{
    int a[]={9,0,4,3,5,6,7,1,2,8};
    MakeMinHeap(a,10);
    Minheapsort(a,10);
    for(int i=0;i<10;i++)
        cout<<a[i]<<" ";
    return 0;
}

选择排序

#include<iostream>
using namespace std;

void SelectSort(int *a,int n)
{
   int i,j,min_index;
   for(i=0;i<n-1;i++)
   {
        min_index=i;
        for(j=i+1;j<n;j++)
             if(a[j]<a[min_index])
                  min_index=j;
        if(min_index!=i)
        {
            int temp=a[i];
            a[i]=a[min_index];
            a[min_index]=temp;
        }

   }
}
int main()
{
     int k;
     int a[10]={0,2,5,4,8,7,1,6,9,3};
    SelectSort(a,10);
     for(k=0;k<10;k++)
          cout<<a[k]<<" ";
     return 0;
}

插入排序

#include<iostream>
using namespace std;
void InsertSort(int *a,int n)
{
     int i, j;
    for (i = 1; i < n; i++)
      for (j = i - 1; j >= 0 && a[j] > a[j + 1]; j--)
         swap(a[j], a[j + 1]);
}
int main()
{
     int k;
     int a[10]={6,5,4,7,8,9,2,3,1,0};
     InsertSort(a,10);
     for(k=0;k<10;k++)
     {
           cout<<a[k]<<" ";
     }
     return 0;
}

希尔排序

#include<iostream>
using namespace std;

void shellSort(int *a,int n)
{
  int i,j,gap;

  for(gap=n/2;gap>0;gap/=2)
       for(i=gap;i<n;i++)
            for(j=i-gap;j>=0&&a[j]>a[j+gap];j-=gap)
                 swap(a[j],a[j+gap]);
}
void main()
{
     int k;

     int a[10]={0,2,1,4,5,9,7,8,6,3};
    shellSort(a,10);
     for(k=0;k<10;k++)
          cout<<a[k]<<" ";
}

相关文章

  • 常见排序算法代码集锦

    冒泡排序 快速排序 归并排序 堆排序 选择排序 插入排序 希尔排序

  • IOS常见算法

    常见算法: 快速排序: 选择排序: 冒泡排序: 测试代码:

  • 排序算法集锦

    冒泡排序 排序算法集锦

  • 经典排序算法总结

    经典排序算法集锦 冒泡法 排序算法入门之冒泡排序 排序算法入门之冒泡排序优化

  • 排序算法

    常见排序算法 本文涉及的算法有:冒泡排序选择排序计数排序 冒泡排序 伪代码 流程图 选择排序 伪代码 流程图 计数...

  • 常见排序算法集锦

    一般而言,常见的排序算法包括以下几类: 交换排序:冒泡排序 快速排序 选择排序:简单选择排序 堆排序 插入排序:直...

  • 算法学习(1)-排序算法

    八大排序算法九大排序算法再总结[经典排序算法][集锦][直观学习排序算法] 视觉直观感受若干常用排序算法 快速排序...

  • 编程算法之排序和查找算法

    查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中。因为其实现代码较短,应用较常见。 一. 排序 常见...

  • 排序算法1: 冒泡排序算法

    C++ 冒泡排序算法的实例源代码,一些排序方法的代码集锦,该函数模板使用冒泡法对集合元素进行排序,参数说明: co...

  • 常见的排序算法(JavaScript实现)

    摘要:本文简单介绍几个常见的排序算法,包括:冒泡排序、选择排序、插入排序、快速排序、归并排序、希尔排序。列出的代码...

网友评论

      本文标题:常见排序算法代码集锦

      本文链接:https://www.haomeiwen.com/subject/vqwvbttx.html