基本排序算法实现

1:插入排序算法

#include <iostream>

#include "stdlib.h"

#include <string.h>

#include <string>

#include <cstring>

#include <fstream>

#include <sstream>

#include <math.h>

using namespace std;

void output(int *arr,int n)

{

    for(int i=0;i<n;i++)

    {

        cout<<arr[i]<<"  ";

    }

    cout<<endl;

}

 

void insert_sort(int *arr,int n)

{

    int temp;

    int i,j;

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

    {

        temp=arr[i];

        j=i;

        while (arr[j-1]>temp && j>0)//这个地方为temp,一定要记住

        {

             arr[j]=arr[j-1];

             j--;

        }

        arr[j]=temp;

    }

}

 

int main()

{

    int n;

    cin>>n;

    int *arr=(int*)malloc(n*sizeof(int));

    int i;

    for(i=0;i<n;i++)

    {

        cin>>arr[i];

    }

    output(arr,n);

    cout<<endl;

 

    insert_sort(arr,n);

    output(arr,n);

    system("pause");

    return 0;

}

插入算法递归:

#include <iostream>

#include "stdlib.h"

#include <string.h>

#include <string>

#include <cstring>

#include <fstream>

#include <sstream>

#include <math.h>

using namespace std;

 

void show(int *arr,int n)

{

    for(int i=0;i<n;i++)

    {

        cout<<arr[i]<<"  ";

    }

    cout<<endl;

}

void merger_insert_sort(int *arr,int n)

{

    if(n>1)

    {

        merger_insert_sort(arr,n-1);

        int temp=arr[n-1];

        int i=n-2;

        while (arr[i]>temp)

        {

             arr[i+1]=arr[i];

             i--;

        }

        arr[i+1]=temp;

    }

}

int main()

{

    int n;

    cin>>n;

    int *arr=(int *)malloc(n*sizeof(int));

    int i;

    for(i=0;i<n;i++)

    {

        cin>>arr[i];

    }

    show(arr,n);

    merger_insert_sort(arr,n);

    show(arr,n);

    system("pause");

    return 0;

}

2:归并排序算法

#include <iostream>

#include "stdlib.h"

#include <string.h>

#include <string>

#include <cstring>

#include <fstream>

#include <sstream>

#include <math.h>

using namespace std;

 

void show(int *arr,int n)

{

    for(int i=0;i<n;i++)

    {

        cout<<arr[i]<<"  ";

    }

    cout<<endl;

}

void merge(int *arr,int p,int q,int r)

{

    int n1,n2;

    int i,j,k;

    n1=q-p+1;

    n2=r-q;

    int *left=(int *)malloc(sizeof(int)*n1);

    int *right=(int *)malloc(sizeof(int)*n2);

    for(i=0;i<n1;i++)

    {

        left[i]=arr[i+p];

    }

    for(j=0;j<n2;j++)

    {

        right[j]=arr[j+q+1];

    }

    i=0;

    j=0;

    k=p;

    while (i<n1 && j<n2)

    {

        if(left[i]<right[j])

        {

             arr[k++]=left[i++];

        }

        else

        {

             arr[k++]=right[j++];

        }

    }

    for(;i<n1;i++)

    {

        arr[k++]=left[i];//这里不需要i++

    }

    for(;j<n2;j++)

    {

        arr[k++]=right[j];//这里不需要j++

    }

}

void merge_sort(int *arr,int p,int r)

{

    if(p<r)

    {

        int q=(p+r)/2;

        merge_sort(arr,p,q);

        merge_sort(arr,q+1,r);

        merge(arr,p,q,r);

    }

}

int main()

{

    int n;

    cin>>n;

    int *arr=(int *)malloc(sizeof(int)*n);

    int i;

    for(i=0;i<n;i++)

    {

        cin>>arr[i];

    }

    show(arr,n);

    merge_sort(arr,0,n-1);

    show(arr,n);

    system("pause");

    return 0;

}

二分查找算法递归:(输出是否存在查找的数据)

#include <iostream>

#include "stdlib.h"

#include <string.h>

#include <string>

#include <cstring>

#include <fstream>

#include <sstream>

#include <math.h>

using namespace std;

 

void show(int *arr,int n)

{

    for(int i=0;i<n;i++)

    {

        cout<<arr[i]<<"  ";

    }

    cout<<endl;

}

void binary_find(int *arr,int left,int right,int value)

{

    if(left>right)

        return;

    int mid=(left+right)/2;

    if(arr[mid]==value)

    {

        cout<<"yes"<<endl;

    }

    else if(arr[mid]>value)

    {

        binary_find(arr,left,mid-1,value);

    }

    else

    {

        binary_find(arr,mid+1,right,value);

    }

}

int main()

{

    int n;

    cin>>n;

    int *arr=(int *)malloc(sizeof(int)*n);

    int i;

    for(i=0;i<n;i++)

    {

        cin>>arr[i];

    }

    show(arr,n);

    cout<<"please input the number of you want to find:";

    int num;

    cin>>num;

    binary_find(arr,0,n-1,num);

    system("pause");

    return 0;

}

二分查找算法递归(输出对应元素的下标,如果没有输出-1)

#include <iostream>

#include "stdlib.h"

#include <string.h>

#include <string>

#include <cstring>

#include <fstream>

#include <sstream>

#include <math.h>

using namespace std;

 

void show(int *arr,int n)

{

    for(int i=0;i<n;i++)

    {

        cout<<arr[i]<<"  ";

    }

    cout<<endl;

}

int binary_find(int *arr,int left,int right,int value)

{

    if(left>right)

    {

        return -1;

    }

    int mid=(left+right)/2;

    if(arr[mid]==value)

    {

        return mid;

    }

    else if(arr[mid]>value)

    {

        return binary_find(arr,left,mid-1,value);

    }

    else

    {

        return binary_find(arr,mid+1,right,value);

    }

}

int main()

{

    int n;

    cin>>n;

    int *arr=(int *)malloc(sizeof(int)*n);

    int i;

    for(i=0;i<n;i++)

    {

        cin>>arr[i];

    }

    cout<<"please input the number you want to find:";

    int num;

    cin>>num;

    cout<<binary_find(arr,0,n-1,num);

    //show(arr,n);

    system("pause");

    return 0;

}

 

二分查找算法非递归(输出对应元素的下标,如果没有输出-1)

#include <iostream>

#include "stdlib.h"

#include <string.h>

#include <string>

#include <cstring>

#include <fstream>

#include <sstream>

#include <math.h>

using namespace std;

 

void show(int *arr,int n)

{

    for(int i=0;i<n;i++)

    {

        cout<<arr[i]<<"  ";

    }

    cout<<endl;

}

int binary_find(int *arr,int left,int right,int value)

{

    int mid;

    while (left<right)

    {

        mid=(left+right)/2;

        if(arr[mid]==value)

        {

             return mid;

        }

        else if(arr[mid]>value)

        {

             right=mid-1;

        }

        else

        {

             left=mid+1;

        }

    }

    return -1;

}

int main()

{

    int n;

    cin>>n;

    int *arr=(int *)malloc(sizeof(int)*n);

    int i;

    for(i=0;i<n;i++)

    {

        cin>>arr[i];

    }

    show(arr,n);

    cout<<"please input the number you want to find:";

    int num;

    cin>>num;

    cout<<binary_find(arr,0,n-1,num);

    system("pause");

    return 0;

}

冒泡排序算法非递归实现

#include <iostream>

#include "stdlib.h"

#include <string.h>

#include <string>

#include <cstring>

#include <fstream>

#include <sstream>

#include <math.h>

using namespace std;

 

void show(int *arr,int n)

{

    for(int i=0;i<n;i++)

    {

        cout<<arr[i]<<"  ";

    }

    cout<<endl;

}

void bubble_sort(int *arr,int n)

{

    int i,j;

    int temp;

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

    {

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

        {

             if(arr[j]>arr[j+1])

             {

                 temp=arr[j];

                 arr[j]=arr[j+1];

                 arr[j+1]=temp;

             }

        }

    }

}

int main()

{

    int n;

    cin>>n;

    int *arr=(int *)malloc(sizeof(int)*n);

    int i;

    for(i=0;i<n;i++)

    {

        cin>>arr[i];

    }

    show(arr,n);

    bubble_sort(arr,n);

    show(arr,n);

    system("pause");

    return 0;

}

冒泡排序算法递归实现

#include <iostream>

#include "stdlib.h"

#include <string.h>

#include <string>

#include <cstring>

#include <fstream>

#include <sstream>

#include <math.h>

using namespace std;

 

void show(int *arr,int n)

{

    for(int i=0;i<n;i++)

    {

        cout<<arr[i]<<"  ";

    }

    cout<<endl;

}

void bubble_sort(int *arr,int n)

{

    if(n>1)

    {

        int temp;

        int i;

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

        {

            if(arr[i]>arr[i+1])

             {

                 temp=arr[i];

                 arr[i]=arr[i+1];

                 arr[i+1]=temp;

             }

        }

        bubble_sort(arr,n-1);

    }

}

int main()

{

    int n;

    cin>>n;

    int *arr=(int *)malloc(sizeof(int)*n);

    int i;

    for(i=0;i<n;i++)

    {

        cin>>arr[i];

    }

    show(arr,n);

    bubble_sort(arr,n);

    show(arr,n);

    system("pause");

    return 0;

}

posted on 2016-04-21 09:17  W.C  阅读(143)  评论(0编辑  收藏  举报

导航