Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

โปรแกรม C เรียงลำดับอาร์เรย์ด้วย Merge Sort

อาร์เรย์เป็นกลุ่มข้อมูลที่เกี่ยวข้องใช้ชื่อร่วมกัน ระบุค่าเฉพาะด้วย "index number"

การประกาศอาร์เรย์

datatype array_name [size];

เช่น float marks[50] ประกาศ marks เป็นอาร์เรย์ 50 float

int number[10] ประกาศ number เป็นอาร์เรย์สูงสุด 10 integer

เข้าถึงสมาชิกอาร์เรย์ง่ายด้วย array index

ตรรกะ Merge Sort:

void MergeSort(int *array, int left, int right){    int middle = (left+right)/2;    if(left<right){       // เรียงส่วนซ้าย       MergeSort(array, left, middle);       // เรียงส่วนขวา       MergeSort(array, middle + 1, right);       // รวมสองส่วน       Merge(array, left, middle, right);    } }

ตรรกะ Merge (รวม):

void Merge(int *array, int left, int middle, int right){    int tmp[right - left + 1];    int pos = 0, leftposition = left, rightposition = middle + 1;    while (leftposition <= middle && rightposition <= right){       if (array[leftposition] < array[rightposition]){          tmp[pos++] = array[leftposition++];       }else{          tmp[pos++] = array[rightposition++];       }    }    while (leftposition <= middle)       tmp[pos++] = array[leftposition++];    while (rightposition <= right)       tmp[pos++] = array[rightposition++];    int i;    for (i = 0; i < pos; i++){       array[i + left] = tmp[i];    }    return; }

โปรแกรม

โปรแกรม C Merge Sort:

#include <stdio.h> void Merge(int * , int , int , int ); void MergeSort(int *array, int left, int right){    int middle = (left+right)/2;    if(left<right){       MergeSort(array, left, middle);       MergeSort(array, middle + 1, right);       Merge(array, left, middle, right);    } } void Merge(int *array, int left, int middle, int right){    int tmp[right - left + 1];    int pos = 0, leftposition = left, rightposition = middle + 1;    while (leftposition <= middle && rightposition <= right){       if (array[leftposition] < array[rightposition]){          tmp[pos++] = array[leftposition++];       }       else{          tmp[pos++] = array[rightposition++];       }    }    while (leftposition <= middle)       tmp[pos++] = array[leftposition++];    while (rightposition <= right)       tmp[pos++] = array[rightposition++];    int i;    for (i = 0; i < pos; i++){       array[i + left] = tmp[i];    }    return; } int main(){    int size;    printf("\n enter size of array:");    scanf("%d", &size);    int array[size];    int i, j, k;    printf("\n enter the elements in an array:");    for (i = 0; i < size; i++){       scanf("%d", &array[i]);    }    MergeSort(array, 0, size - 1);//calling sort function    for (i = 0; i< size; i++){       printf("%d ", array[i]);    }    printf("\n");    return 0; }

ผลลัพธ์

enter size of array:10 enter the elements in an array: 2 -10 34 -3 45 67 -89 34 23 67 -89 -10 -3 2 23 34 34 45 67 67