归并排序
来源:互联网 发布:软件测试需要linux 编辑:程序博客网 时间:2024/04/25 17:52
排序算法——合并排序(Merge sort)
合并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
最坏时间复杂度 O(nlogn)
合并排序是稳定的排序算法
- #include <stdio.h>
- #include <stdlib.h>
- void merge(int a[], int p, int q, int r)
- {
- int i, j, k;
- int *temp = (int *)malloc((r - p + 1) * sizeof(int));
- i = p;
- j = q + 1;
- k = 0;
- while ((i <= q) && (j <= r)) {
- if (a[i] < a[j])
- temp[k] = a[i++];
- else
- temp[k] = a[j++];
- k++;
- }
- while (i <= q)
- temp[k++] = a[i++];
- while (j <= r)
- temp[k++] = a[j++];
- for (i = 0; i < r - p + 1; i++) {
- a[p+i] = temp[i];
- }
- free(temp);
- }
- void merge_sort(int a[], int p, int r)
- {
- int q;
- if (p < r) {
- q = (p + r) / 2;
- merge_sort(a, p, q);
- merge_sort(a, q + 1, r);
- merge(a, p, q, r);
- }
- }
- int main()
- {
- int a[] = {5,2,4,7,1,3,2,6}, i;
- int p = 0, r = sizeof(a) / sizeof(int);
- merge_sort(a, p, r);
- for (i = 0; i < r; i++)
- printf("%d ", a[i]);
- return 0;
- }
12-18行选择最小的元素复制到temp,19-22行将剩余序列的元素复制到temp,24-26行将排好序的序列复制到数组。
------------------------------------------------自己代码--------------------------------------------------------------------------------------
#include <iostream>#include <stdio.h>using namespace std;void merge(int arr[],int start,int mid,int end){int *arrs=(int*)malloc(sizeof(int)*(end-start+1));int s=start,m=mid+1,i=0;while(s<=mid&&m<=end){if(arr[s]<arr[m]){arrs[i++]=arr[s];s++;}else{arrs[i++]=arr[m];m++;}}while(s<=mid)arrs[i++]=arr[s++];while(m<=end)arrs[i++]=arr[m++];for(int k=start,i=0;k<=end;k++)arr[k]=arrs[i++];free(arrs);};void divideconquer(int arr[],int start,int end){if(start<end){int mid =(start+end)/2;divideconquer(arr,start,mid);divideconquer(arr,mid+1,end);merge( arr, start, mid, end);}};void main(){int arr[]={1,2,3,4,5};divideconquer(arr,0,4);for(int i=0;i<5;i++)cout<<arr[i]<<endl;system("pause");}
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- Android获取屏幕状态
- 如何解决"应用程序无法启动,因为应用程序的并行配置不正确"问题
- iOS开发ASIHttpRequest创建和执行request
- matlab 中eps的用法
- JAVA File Lock
- 归并排序
- Windows操作系统产品名与内部版本号的对应
- 获取文件的绝对路径
- MyBatis使用Generator自动生成代码
- PHP中的cookie与session
- NSArray中的最大值和最小值
- 博弈总结
- sencha touch + PhoneGap(cordova) 使用 adt eclipse进行打包
- Java的HashMap和HashTable