基本排序算法实现
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;
}