void merge(thing*time,thing*tmp,int left,int left_end,int right,int right_end){ int size = right_end -left +1,k=left; while(left<=left_end&&right<=right_end){ if(time[left].end<=time[right].end){ tmp[k++] = time[left++]; } else tmp[k++] = time[right++]; } while(left<=left_end) tmp[k++] = time[left++]; while(right<=right_end) tmp[k++] = time[right++]; for(int i=0;i<size;i++,right_end--){ time[right_end] = tmp[right_end]; } } void mergeSort(thing*time,thing*tmp,int start,int end){ if(start>=end) return; int mid = (start+end)/2; mergeSort(time,tmp,start,mid); mergeSort(time,tmp,mid+1,end); merge(time,tmp,start,mid,mid+1,end); }