一、归并排序
思路分析:
对于一组序列,那么程序进行就是先将所有数字分成单个部分,然后再两两排序结合,就是先从第4步开始,然后调用merge函数到第5步,然后继续调用merge函数,到第6步,依次下来,直至序列排好。
c++代码实现:
#include<iostream>
using namespace std;
void merge(int *arr, int L, int M, int R){
int left_size = M-L;
int right_size = R-M+1;
int *L_arr = new int[left_size];
int *R_arr = new int[right_size];
for(int i=L; i<M; i++)
L_arr[i-L] = arr[i];
for(int i=M; i<=R; i++)
R_arr[i-M]= arr[i];
int i = 0, j = 0, k = L;
while(i < left_size && j < right_size)
if(L_arr[i]<R_arr[j])
arr[k++] = L_arr[i++];
else
arr[k++] = R_arr[j++];
while(i < left_size)
arr[k++] = L_arr[i++];
while(j < right_size)
arr[k++] = R_arr[j++];
}
void merge_sort(int *arr, int L, int R){
if(L == R)
return;
else
{
int M = (L+R)/2;
merge_sort(arr, L, M);
merge_sort(arr, M+1, R);
merge(arr, L, M+1, R);
}
}
int main()
{
int arr[10]={6, 3, 2, 7, 5, 1, 4, 0, 8, 9};
merge_sort(arr, 0, 9);
for(int i=0;i<10;i++)
{
cout<<arr[i];
}
return 0;
}
2、快速排序
思路分析:
c++代码实现:
#include<iostream>
int sentry(int a[], int m,int n)
{
int point = m;
int j = n , i = m;
int temp1 ,temp2;
while(i != j)
{
while(a[j] > a[point] && i < j)
{
--j;
}
while(a[i] < a[point] && i < i)
{
++i;
}
if(i < j)
{
temp1 = a[j];
a[j] = a[i];
a[i] = temp1; //交换i,j所指的数值
}
}
temp2 = a[point];
a[point] = a[i];
a[i] = temp2; //交换基准点
return i;
}
void QuickSort(int a[], int m,int n)
{
if(m < n)
{
int q = sentry(a , m , n);
QuickSort(a, m, q);
QuickSort(a,q+1, n);
}
}
int main()
{
int a[] = { 6,1,2,7,9,3,4,5,10,8 };
int m = 0;
int n = (sizeof(a) / 4)-1;
QuickSort(a, m,n);
for (int i = 0; i < 10; i++)
{
std::cout << a[i] << " ";
}
}