归并排序的实现-代码
生活随笔
收集整理的這篇文章主要介紹了
归并排序的实现-代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include<stdio.h>
void merge_sort(int *a,int *b,int x,int y)
{ if(y-x>1) { int m=x+(y-x)/2;//中間點的坐標 int p=x,q=m,i=x; merge_sort(a,b,x,m); merge_sort(a,b,m,y); while(p<=m||q<y) { if(q>=y||(p<m&&a[p]<=a[q])) b[i++]=a[p++];//從左半數組復 制到臨時空間 else b[i++]=a[q++];// 從右半 數組復制到臨時空間 } for(i=x;i<y;i++) a[i]=b[i]; }
}
int main()
{ int b[100],a[100],n; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); int mid=n/2; merge_sort(a,b,0,n); for(int i=0;i<n;i++) printf("%d ",a[i]); return 0;
}
2018/03/27更新添加java代碼:
package com.tjrac_java_2;import java.util.Scanner;public class MargeSort {public static void main(String[] args) {int[] a = new int[5];Scanner sc = new Scanner(System.in);for (int i = 0; i < a.length; i++) {a[i] = sc.nextInt();}int[] temp = new int[5];marge_sort(a, 0, 5, temp);for (int i = 0; i < a.length; i++) {System.out.println(a[i]);}}private static void marge_sort(int[] a, int left, int right, int[] temp) {// 1.遞歸出口if (right - left > 1) {int mid = left + (right - left) / 2;int pLeft = left, qRight = mid, i = left;marge_sort(a, left, mid, temp);marge_sort(a, mid, right, temp);// 從左半邊數組復制到臨時空間while (pLeft < mid || qRight < right) {//qRight>=right是當右半邊的數組都小于左半邊的數組時,先把右半邊數組放在臨時空間,然后再放左半邊數組,因此不用再進行比較左右兩邊數組了if (qRight >= right || (pLeft < mid && a[pLeft] <= a[qRight])) {temp[i++] = a[pLeft++];} else {// 從右半 數組復制到臨時空間temp[i++] = a[qRight++];}}for (int j = left; j < right; j++) {a[j] = temp[j];}}} }總結
以上是生活随笔為你收集整理的归并排序的实现-代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eclipse定义和修改模板
- 下一篇: 八皇后问题详解(最短代码)