How do I sort a 2D-array(strings) using merge sort? e.g. arr[0] = "foo"; arr[1] = "bar"; and I hope it to be like arr[0] = "bar"; arr[1] = "foo"; after being sorted but it doesn't work Need some help here. The following is my code for merge sort: char * tem[10]; void merge(char * arr[], int s1, int e1, int s2, int e2) { int index = s1; int k = s1; while(s1 <= e1 && s2 <= e2) { int i = 0, j = 0; while(arr[s1][i] != '\0' && arr[s2][j] != '\0') { if(arr[s1][i] < arr[s2][j]) { tem[index] = arr[s1]; s1++; index++; break; } else if(arr[s1][i] > arr[s2][j]) { tem[index] = arr[s2]; s2++; index++; break; } else { i++; j++; } } if(arr[s1][i] == '\0' && arr[s2][j] != '\0') { tem[index] = arr[s1]; s1++; index++; } else if(arr[s1][i] != '\0' && arr[s2][j] == '\0') { tem[index] = arr[s2]; s2++; index++; } else if(arr[s1][i] == '\0' && arr[s2][j] == '\0') { tem[index] = arr[s1]; index++; s1++; tem[index] = arr[s2]; index++; s2++; } } for(k; k <= e2; k++) arr[k] = tem[k]; } void merge_sort(char * arr[], int start, int end) { if(start < end) { int mid = (start + end) / 2; merge_sort(arr, start, mid); merge_sort(arr, mid + 1, end); merge(arr, start, mid, mid + 1, end); } } And this is my 2D-array input[2][3]; I use "strcpy" to copy "foo" and "bar" to input[1] and input[2] This is how I call the function: void merge_sort(input, 0, 1); I think the problem might be the first parameter of the function "merge" since I'm not sure if I can pass the 2D-array as "char * []"... Thanks!