首页 > 试题广场 >

对一组数据(6,9,5,4,8,3)排序,经过一趟排序后,变

[单选题]

对一组数据(6,9,5,4,8,3)排序,经过一趟排序后,变为(6,9,4,5,3,8),则采用的排序算法是()

  • 选择
  • 归并
  • 起泡
  • 插入
//
// Created By John on 2021/02/24.
// 归并排序
// 主要有两个函数,一个合并函数,这个是核心函数,将两个子部分按顺序合并在一起,应该从分散往完整看;另一个是递归函数,主要用来分化数组,应该从完整往分散看
// 辅助数组B要全局,如果放到合并函数里面的话,每一次被调用就会被new一个新的,很浪费空间
#include<stdlib.h>
#define SIZE 10
static int *B = (int*) malloc(SIZE * sizeof (int));

/**
 * 合并函数
 * @param A 待排序的数组
 * @param low
 * @param mid
 * @param high n-1
 */
static void merge(int A[], int low, int mid, int high){
    int i,j,k;
    for (k = low; k <= high; ++k) B[k] = A[k]; //将A数组数据搬到辅助数组B中
    for (i = low, j = mid + 1, k = i; i <= mid && j <= high; k++) {
        //两路中小的要先放入到数组A中
        if (B[i] <= B[j])
            A[k] = B[i++];
        else
            A[k] = B[j++];
    }
    //再将长的数组剩下的部分放回A数组中
    while (i <= mid) A[k++] = B[i++];
    while (j <= high) A[k++] = B[j++];
}

static void mergeSort(int A[],int low,int high){
    if (low < high){
        int mid = (low + high)/2;
        mergeSort(A,low,mid);
        mergeSort(A,mid + 1,high);
        merge(A,low,mid,high);
    }
}

发表于 2021-02-25 00:06:06 回复(0)
B
发表于 2020-05-01 16:03:35 回复(0)
归并排序,初始{6,9,5,4,8,3 } --> 划分后:{6,9},{5,4},{8,3} -->每组分别排序:{6,9},{4,5},{3,8}
发表于 2017-04-05 13:41:10 回复(0)
归并排序

发表于 2017-04-04 21:09:15 回复(0)
lqm头像 lqm
归并排序。
归并排序是依次比较元素的大小,并将较小的值放到下标小的位置,如果下标小的值本来就小就不需要交换位置。
如:保证i = j - 1,比较a[i]和a[j],如果a[i] > a[j],将a[j]放到k[i](buffer)中,相当于交换了a[i]和a[j],保持a[i]  < a[j],之后i++和j++。
发表于 2017-04-04 16:51:08 回复(0)
归并

发表于 2017-04-04 16:06:38 回复(0)
归并排序
发表于 2017-04-04 14:39:55 回复(0)