Title: Advanced C Programming Techniques

```c

include

// Function prototypes

void mergeSort(int arr[], int l, int r);

void merge(int arr[], int l, int m, int r);

int main() {

int arr[] = {12, 11, 13, 5, 6, 7};

int arr_size = sizeof(arr) / sizeof(arr[0]);

printf("Given array is \n");

printArray(arr, arr_size);

mergeSort(arr, 0, arr_size 1);

printf("\nSorted array is \n");

printArray(arr, arr_size);

return 0;

}

void mergeSort(int arr[], int l, int r) {

if (l < r) {

int m = l (r l) / 2;

mergeSort(arr, l, m);

mergeSort(arr, m 1, r);

merge(arr, l, m, r);

}

}

void merge(int arr[], int l, int m, int r) {

int i, j, k;

int n1 = m l 1;

int n2 = r m;

// Create temporary arrays

int L[n1], R[n2];

// Copy data to temporary arrays L[] and R[]

for (i = 0; i < n1; i )

L[i] = arr[l i];

for (j = 0; j < n2; j )

R[j] = arr[m 1 j];

// Merge the temporary arrays back into arr[l..r]

i = 0; // Initial index of first subarray

j = 0; // Initial index of second subarray

k = l; // Initial index of merged subarray

while (i < n1 && j < n2) {

if (L[i] <= R[j]) {

arr[k] = L[i];

i ;

} else {

arr[k] = R[j];

j ;

}

k ;

}

// Copy the remaining elements of L[], if there are any

while (i < n1) {

arr[k] = L[i];

i ;

k ;

}

// Copy the remaining elements of R[], if there are any

while (j < n2) {

arr[k] = R[j];

j ;

k ;

}

}

void printArray(int A[], int size) {

int i;

for (i = 0; i < size; i )

printf("%d ", A[i]);

printf("\n");

}

```

This is an implementation of the Merge Sort algorithm in C. Merge Sort is an efficient, stable, comparisonbased sorting algorithm that divides the unsorted list into smaller sublists, recursively sorts each sublist, and then merges them to produce the final sorted list.

In this implementation:

The `mergeSort` function divides the array into halves until each sublist contains only one element.

The `merge` function then merges these sublists in a sorted manner.

Finally, the `printArray` function is used to display the sorted array.

This code demonstrates advanced techniques such as recursion, array manipulation, and algorithm design. Understanding and mastering such techniques are essential for writing efficient and reliable C programs.

免责声明:本网站部分内容由用户自行上传,若侵犯了您的权益,请联系我们处理,谢谢!

分享:

扫一扫在手机阅读、分享本文