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

โปรแกรม C สำหรับ Recursive Insertion Sort


Insertion Sort เป็นอัลกอริทึมการจัดเรียงที่เป็น in-place comparison-based algorithm

อัลกอริทึมนี้ทำงานโดยการวางองค์ประกอบในตำแหน่งที่ถูกต้องในสับอาร์เรย์ที่จัดเรียงแล้ว คือ สับอาร์เรย์ก่อนหน้าองค์ประกอบที่เป็นสับอาร์เรย์ที่จัดเรียงแล้ว

อัลกอริทึม

ขั้นตอนที่ 1 − วนลูปจาก 1 ถึง n-1 และทำดังนี้

ขั้นตอนที่ 2.1 − เลือกองค์ประกอบที่ตำแหน่ง i คือ array[i]

ขั้นตอนที่ 2.2 − แทรกองค์ประกอบในตำแหน่งของมันในสับอาร์เรย์ที่จัดเรียงแล้ว array[0] ถึง arr[i]

มาดูตัวอย่างเพื่อเข้าใจอัลกอริทึม

อาร์เรย์ = [34, 7, 12, 90, 51]

สำหรับ i = 1, arr[1] = 7, วางในตำแหน่งของมันในสับอาร์เรย์ arr[0] - arr[1]

[7, 34, 12, 90, 51]

สำหรับ i = 2, arr[2] = 12, วางในตำแหน่งของมันในสับอาร์เรย์ arr[0] - arr[2]

[7, 12, 34, 90, 51]

สำหรับ i = 3, arr[3] = 90, วางในตำแหน่งของมันในสับอาร์เรย์ arr[0] - arr[3]

[7, 12, 34, 90, 51]

สำหรับ i = 4, arr[4] = 51, วางในตำแหน่งของมันในสับอาร์เรย์ arr[0] - arr[4]

[7, 12, 34, 54, 90]

ที่นี่ เราจะดูว่า Recursive Insertion Sort ทำงานอย่างไร มันทำงานแบบย้อนกลับ คือ เราจะเรียกฟังก์ชัน recursiveInsertionSort() แบบเรียกซ้ำเพื่อจัดเรียงอาร์เรย์ n-1 องค์ประกอบเทียบกับการวนรอบปัจจุบัน จากนั้นในอาร์เรย์ที่จัดเรียงแล้วซึ่งจะถูกคืนค่ากลับโดยฟังก์ชัน เราจะแทรกองค์ประกอบที่ n ไว้ที่ตำแหน่งของมันในอาร์เรย์ที่จัดเรียงแล้ว

โปรแกรมสำหรับ Recursive Insertion Sort −

ตัวอย่าง

#include <stdio.h>
void recursiveInsertionSort(int arr[], int n){
    if (n <= 1)
        return;
    recursiveInsertionSort( arr, n-1 );
    int nth = arr[n-1];
    int j = n-2;
    while (j >= 0 && arr[j] > nth){
        arr[j+1] = arr[j];
        j--;
    }
    arr[j+1] = nth;
}
int main(){
    int array[] = {34, 7, 12, 90, 51};
    int n = sizeof(array)/sizeof(array[0]);
    printf("Unsorted Array:\t");
    for (int i=0; i < n; i++)
        printf("%d ",array[i]);
    recursiveInsertionSort(array, n);
    printf("\nSorted Array:\t");
    for (int i=0; i < n; i++)
        printf("%d ",array[i]);
    return 0;
}

ผลลัพธ์

Unsorted Array: 34 7 12 90 51
Sorted Array: 7 12 34 51 90