1.快速排序
#ifndef _PARTION_H_
#define _PARTION_H_
#include <iostream>
#include<string>
#include<assert.h>
#include<fstream>
#include<malloc.h>
using namespace std;
void quick_sort(int *arr,int p,int q);
int partion(int *arr,int p,int q);
void printResult(int *arr,int len);
#endif // PARTION_H_INCLUDED
#include"partion.h"
void quick_sort(int *arr,int l,int r)
{
int t;
if(l<r)
{
t = partion(arr,l,r);
quick_sort(arr,l,t-1);
quick_sort(arr,t+1,r);
}
return ;
}
int partion(int *arr,int l,int r)
{
int temp1 = arr[r];
int temp2;
int i= l-1;
for(int j = l;j<r;j++)
{
if(arr[j]<=temp1)
{
i = i+1;
temp2 = arr[i];
arr[i] = arr[j];
arr[j] = temp2;
}
}
temp2 = arr[r];
arr[r] = arr[i+1];
arr[i+1] = temp2;
return i+1;
}
void printResult(int *arr,int len)
{
cout<<"the result of quick_sort:"<<endl;
for(int i=0;i<len;i++)
{
cout<<arr[i]<<endl;
}
return ;
}
#include"partion.h"
int main()
{
string filename;
filename = "../test.txt";
ifstream infile;
infile.open(filename.c_str());
assert(infile);
int temp,len;
int i=0;
int *arr;
arr = (int*)malloc(sizeof(int)*50);
infile>>temp;
while(temp != 0)
{
cout<<temp<<endl;
arr[i] = temp;
i++;
infile>>temp;
}
len = i;
quick_sort(arr,0,len-1);
printResult(arr,len);
free(arr);
return 0;
}
2、插入排序
#ifndef _INSERT_H_
#define _INSERT_H_
#include<fstream>
#include<assert.h>
#include<stdlib.h>
#include<iostream>
#include<string>
#include<malloc.h>
using namespace std;
void insertSort(int *ar,int l);
void printResult(int *ar,int l);
#endif // _INSERT_H_
#include"insert.h"
void insertSort(int *arr,int len)
{
int key;
for(int i = 1;i<len;i++)
{
int key = arr[i];
int j = i-1;
while(j>=0 && arr[j]>key)
{
arr[j+1] = arr[j];
j -= 1;
}
arr[j+1] = key;
}
return ;
}
void printResult(int *arr,int len)
{
for(int i = 0;i<len;i++)
{
cout<<arr[i]<<endl;
}
return ;
}
#include"insert.h"
int main()
{
ifstream infile;
string filename = "../test.txt";
infile.open(filename.c_str());
assert(infile);
int *arr;
arr = (int *)malloc(sizeof(int)*15);
int len = 15;
int temp;
for(int i=0;i<len;i++)
{
infile>>temp;
arr[i] = temp;
}
//for(int i=0;i<len;i++)
// cout<<arr[i]<<endl;
insertSort(arr,len);
printResult(arr,len);
free(arr);
return 0;
}
3、归并排序
#ifndef _MERGESORT_H_
#define _MERGESORT_H_
#include<iostream>
#include<stdio.h>
#include<vector>
#include<algorithm>
#include<stdlib.h>
#include<time.h>
using namespace std;
void mergesort(int arr[],int first,int last);
void mergearray(int arr[], int first, int mid, int last);
#endif // _MERGESORT_H_
#include"mergesort.h"
void mergesort(int arr[],int first,int last)
{
int mid;
if(first<last)
{
mid =(int)(first+last)/2;
mergesort(arr,first,mid);
mergesort(arr,mid+1,last);
mergearray(arr,first,mid,last);
}
return;
}
void mergearray(int arr[], int first, int mid, int last)
{
int *left ,*right;
int left_size = mid-first+1;
int right_size = last-mid;
left = new int[left_size];
right = new int[right_size];
for(int i = 0; i <left_size; i++)
{
left[i] = arr[first+i];
}
for(int j = 0; j < right_size; j++)
{
right[j] = arr[mid+1+j];
}
int i=0;
int j=0;
int k=first;
while(i<left_size && j<right_size)
{
if(left[i]<right[j])
{
arr[k++] = left[i++];
}
else
{
arr[k++] = right[j++];
}
}
while(i<left_size)
{
arr[k++]=left[i++];
}
while(j<right_size)
{
arr[k++]=right[j++];
}
return;
}
#include"mergesort.h"
const int MAXN = 10;
int arr[MAXN];
int main()
{
int arr_size;
srand(time(NULL));
for(int i = 0; i<MAXN; i++)
{
arr[i] = rand();
}
arr_size = sizeof(arr)/sizeof(int);
for(int i=0;i<arr_size;i++)
{
cout<<arr[i]<<" ";
}
mergesort(arr,0,MAXN-1);
cout<<endl<<"after sort"<<endl;
for(int i=0;i<arr_size;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
return 0;
}