您的位置:首页 > 其它

快速排序-合并排序(分治法运用)

2015-07-13 15:32 375 查看
快速排序

#include <iostream>
using namespace std;

#define N 10
int a
={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 <iostream>
using namespace std;

#define N 10
int a
={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
;
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++];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: