用C++实现七种排序算法,可选择排序方法,简单易懂。

       最近学习算法,先从简答的开始学起,用C++做了一个实现七种排序算法的界面,可选择想要用的选择算法,不过,由于时间仓促,没有来得及优化和代码注释,后期还会加上代码注释,随便优化一下代码,提高执行效率;

/*************************************************************************
	> File Name: sort.cpp
	> Author: kanty
	> Email: jiakang906@126.com 
	> Created Time: Mon 24 Feb 2014 08:41:08 PM CST
 ************************************************************************/

#include<iostream>
#define NUM 50
using namespace std;

int Division(int a[],int left,int right)
{
    int base=a[left];
    while(left<right)
    {
    while(left<right && a[right]>base)
        --right;
        a[left]=a[right];
    while(left<right && a[left]<base)
        ++left;
        a[right]=a[left];
    }

    a[left]=base;
    return left;
}

void InsertSort(int a[],int m)
{
    int i,j,t;
    for(i=1;i<m;i++)
    {
        t=a[i];
        for(j=i-1;j>=0 && t<a[j];j--)
            a[j+1]=a[j];
        a[j+1]=t;
    }
}

void BubbleSort(int a[],int m)
{
    int i,j,temp;
    for(i=0;i<m-1;i++)
    {
        for(j=0;j<m-1-i;j++)        {
            if(a[j]>a[j+1])
            {
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
    }
}

/*
 * void BubbleSort(int a[],int m)
 * {
 *  int i,j,temp;
 *  for(i=0;i<m-1;i++)
 *  {
 *  for(j=m-1;j>i;j--)
 *  {
 *      if(a[j]<a[j-1])
 *      {
 *          temp=a[j];
 *          a[j]=a[j-1];
 *          a[j-1]=temp;
 *      }
 *  }
 *  }
 * }
 */


void SelectSort(int a[],int m)
{
  int i,j,k,temp;
    for(i=0;i<m-1;i++)
    {
        k=i;
        for(j=i+1;j<m;j++)
        if(a[k]>a[j]) 
          k=j;
        temp=a[i];
        a[i]=a[k];
        a[k]=temp;
    }
}

void QuickSort(int a[],int left,int right)
{
    int i,j;
    if(left<right)
    {
        i=Division(a,left,right);
        QuickSort(a,left,i-1);
        QuickSort(a,i+1,right);
    }
}

void ShellSort(int a[],int m)
{
    int i,j,x,d;
    d=m/2;
    while(d>=1)
    {
    for(i=d;i<m;i++)
    {
        x=a[i];
        j=i-d;
        while(j>=0 && a[j]>x)
        {
            a[j+d]=a[j];
            j=j-d;
        }
        a[j+d]=x;
    }
        d=d/2;
    }
}

void HeapAdjust(int a[],int s,int n)
{
    int j,t;
    while(2*s+1<n)
    {
        j=2*s+1;
        if((j+1)<n)
        {
            if(a[j]<a[j+1])
            j++;
        }
        if(a[s]<a[j])
        {
            t=a[s];
            a[s]=a[j];
            a[j]=t;
            s=j;
        }
        else
        break;
    }
}

void HeapSort(int a[],int m)
{
    int t,i;
    int j;
    for(i=m/2-1;i>=0;i--)
    HeapAdjust(a,i,m);
    for(i=m-1;i>0;i--)
    {
        t=a[0];
        a[0]=a[i];
        a[i]=t;
        HeapAdjust(a,0,i);
    }
}

void MergeStep(int a[],int r[],int s,int m,int n)
{
    int i,j,k;
    i=s;
    k=s;
    j=m+1;
    while(i<=m && j<=n)
    {
        if(a[i]<=a[j])
        r[k++]=a[i++];
        else
        r[k++]=a[j++];
    }
    while(i<=m)
    r[k++]=a[i++];
    while(j<=n)
    r[k++]=a[j++];
}

void MergePass(int a[],int r[],int n,int len)
{
    int s,e;
    s=0;
    while(s+len<n)
    {
        e=s+2*len-1;
        if(e>=n)
        e=n-1;
        MergeStep(a,r,s,s+len-1,e);
        s=e+1;
    }
    if(s<n)
    for(;s<n;s++)
    r[s]=a[s];
}

void MergeSort(int a[],int m)
{
    int *p;
    int len=1;
    int flag=0;
    if(!(p= new int(sizeof(int)*m)))
    {
        cout<<"failed allert!!!"<<endl;
    }
    while(len<m)
    {
        if(flag)
        MergePass(p,a,m,len);
        else
        MergePass(a,p,m,len);
        len*=2;
        flag=1-flag;
    }
    if(flag)
        for(flag=0;flag<m;flag++)
        a[flag]=p[flag];
    delete (p);

}

void choose(int a[],int m)
{
    int i;
    cout<<endl<<"*************  sort  ***************"<<endl<<endl;
    cout<<"*******     1---InsertSort      ********"<<endl;
    cout<<"*******     2---BubbleSort  ********"<<endl;
    cout<<"*******     3---SelectSort  ********"<<endl;
    cout<<"*******     4---QuickSort   ********"<<endl;
    cout<<"*******     5---ShellSort   ********"<<endl;
    cout<<"*******     6---HeapSort    ********"<<endl;
    cout<<"*******     7---MergeSort   ********"<<endl<<endl;
    cout<<"************************************"<<endl;
    cout<<"please choose a sort algorithm:  ";
    cin>>i;
    switch(i)
    {
        case 1  : InsertSort(a,m);break;
        case 2  : BubbleSort(a,m);break;
        case 3  : SelectSort(a,m);break;
        case 4  : QuickSort(a,0,m-1);break;
        case 5  : ShellSort(a,m);break;
        case 6  : HeapSort(a,m);break;
        case 7  : MergeSort(a,m);break;
        default : break;
    }
}

int main()
{
    int a[NUM],n;
    cout<<"please input n :"<<endl;
    cin>>n;
    cout<<"please input  "<<n<<"  numbers:"<<endl;
    for(int i=0;i<n;i++)
    cin>>a[i];
    cout<<"before sorted:"<<endl;
    for(int i=0;i<n;i++)
    cout<<a[i]<<"  ";
    //cout<<"please choose a sort algorithm:"<<endl;
    choose(a,n);
    cout<<"after sorted:"<<endl;
    for(int i=0;i<n;i++)
    cout<<a[i]<<"   ";
    return 0;

}






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C/C++算法常用手册是程序员日常工作中不可或缺的工具书之一。该手册主要收录了程序员在开发过程中常用的算法,以及相应的代码实现。该手册涵盖了诸如数据结构、排序、查找、递归、贪心、动态规划、字符串等算法,帮助程序员快速掌握这些算法的基本原理和实现方式。简单地说,该手册将算法的核心原理和实现细节集中在了一起,兼顾了易懂性和实用性。 随着程序员需求的不断增加,该手册逐渐扩充了更多的算法类型。同时,该手册还根据算法的不同应用场景进行分类,方便程序员快速查找和使用。例如,程序员可以通过该手册快速了解不同数据结构的原理和实现方法,了解常见算法的时间复杂度和空间复杂度,还可以查找常见的实际问题中的算法实现方式。 总的来说,C/C++算法常用手册是程序员必备的工具之一,帮助程序员提高算法的实现能力和解决实际问题的能力,提高程序的效率和质量。 ### 回答2: C/C++常用算法手册是一本介绍计算机算法的参考手册,主要面向C/C++语言程序员。该手册总结了各种常用的算法,包括排序、查找、图论、字符串等。通过该手册的学习,可以让程序员更好地掌握C/C++编程的技巧和方法。 该手册中介绍了排序算法,包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。对于不同的排序算法,手册详细介绍了它们的思路和实现方法,同时也对它们的时间复杂度和效率进行了分析和比较。 在查找方面,手册介绍了常用的顺序查找和二分查找算法,它们可以帮助程序员快速地定位和查找数据。 在图论和字符串方面,手册介绍了很多有用的算法,如最短路径算法、最小生成树算法、字符串匹配算法等。这些算法可以帮助程序员更好地解决实际问题。 总之,C/C++常用算法手册是一本非常实用和有价值的参考书,它可以让程序员掌握更多的C/C++算法技巧,提高程序员的编程能力和开发效率。 ### 回答3: C/C++ 常用算法手册是一本总结了 C/C++ 编程语言中常用的算法、数据结构、设计模式等知识的参考书籍。 相对于其他语言,C 和 C++ 语言有着更高的执行效率和更多的编程自由度,也因此被广泛应用于开发高性能、底层的软件程序。在这样的应用场景下,对算法和数据结构的掌握显得尤为重要。 C/C++ 常用算法手册涵盖了各种基础的算法和数据结构,比如排序、查找、链表、树等。同时,它也介绍了一些常用的高级算法,比如动态规划、贪心算法和回溯算法。 此外,该手册还详细说明了面向对象编程领域中常用的设计模式和其实现方式,例如工厂模式、装饰器模式等。 阅读 C/C++ 常用算法手册不但能够让读者掌握常用算法的实现方法,更能提高编程思维和技巧。另外,在实际应用中,编写高效的程序不仅需要算法的巧妙运用,更需要细致、严谨的代码风格和设计思路。此时,该手册中丰富的示例代码和编码规范性的讲解也能为读者提供很大的帮助。 总之,C/C++ 常用算法手册是一本既实用又深入的参考书,适合广大 C/C++ 开发者和算法学习者阅读。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值