快速排序
#include
using namespace std;
#define N 10
int a[N]={3,3,56,7,4,4,3,2,2,3};
void swap(int i,int j);
int partition(int begin,int end);
void quicksort(int begin,int end);
int main(){
quicksort(0,N-1);
int i;
for(i = 0; i < N; i++){
cout << a[i] << " ";
}
cout << endl;
return 0;
}
void quicksort(int begin,int end){
int j;
if(begin < end){
j=partition(begin,end);
quicksort(begin,j-1);
quicksort(j+1,end);
}
}
int partition(int begin,int end){
int i = begin,j = end+1;
do{
do{
i++;
}while(a[i] < a[begin]);
do{
j--;
}while(a[j] > a[begin]);
if(i<=j){
swap(i,j);
}
}while(i<=j);
swap(begin,j);
return j;
}
void swap(int i,int j){
int tmp;
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
合并排序
/*归并排序*/
#include
using namespace std;
#define N 10
int a[N]={1,2,3,93,5,6,39,8,4,9};
void merge_sort(int begin,int end,int a[]);
void merge(int begin,int mid,int end);
int main(){
merge_sort(0,N-1,a);
int i;
for(i = 0; i < N; i++){
cout << a[i] << " ";
}
cout << endl;
return 0;
}
void merge_sort(int begin,int end,int a[]){
int m;
if(begin < end){
m = (begin + end)/2;
merge_sort(begin,m,a);
merge_sort(m+1,end,a);
merge(begin,m,end);
}
}
void merge(int begin,int mid,int end){
int T[N];
int i = begin, j = mid+1,k = begin;
while(i <= mid || j <= end){
if((j > end)||(i <= mid && a[i] <= a[j])){
T[k++] = a[i++];
}
else{
T[k++] = a[j++];
}
}
for(i=begin,k=begin;k<=end;){
a[k++] = T[i++];
}
}