В чем проблема в этом коде ... могу ли я пройти этот путь
Я хочу написать программу wright для сортировки слиянием трех способов с использованием двух способов,с минимальной временной сложностью
Что я уже пробовал:
#include <stdio.h> #define max 10 int a[11] = { 10, 14, 19, 26, 27, 31, 33, 35, 42, 44, 0 }; int b[10]; void merging(int low, int mid1,int mid2, int high) { int l1, l2,l3, i; for(l1 = low, l2 = mid1 + 1,l3=mid2+1,i = low; l1 <= mid1 && l2 <= mid2,l3<=high; i++) { if((a[l1] <= a[l2])&&(a[l1]<=a[l3])) b[i] = a[l1++]; else if((a[l2]<=a[l1])&&(a[l2]<=a[l3])) b[i] = a[l2++]; else b[i]=a[l3++]; } while(l1 <= mid1) b[i++] = a[l1++]; while(l2 <= mid2) b[i++] = a[l2++]; while(l3<=high) b[i++]=a[l3++]; for(i = low; i <= high; i++) a[i] = b[i]; } void sort(int low, int high) { int mid1,mid2; if(low < high) { mid1 = (low + high) / 3; mid2=2*(low+high)/3; sort(low, mid1); sort(mid1+1,mid2); sort(mid2+1, high); merging(low, mid1,mid2, high); } else { return; } } int main() { int i; printf("List before sorting\n"); for(i = 0; i <= max; i++) printf("%d ", a[i]); sort(0, max); printf("\nList after sorting\n"); for(i = 0; i <= max; i++) printf("%d ", a[i]); }