📌  相关文章
📜  C程序以升序对数组进行排序

📅  最后修改于: 2021-05-28 04:12:47             🧑  作者: Mango

给定大小为N的数组arr [] ,任务是在C中按升序对该数组进行排序。
例子:

Input: arr[] = {0, 23, 14, 12, 9}
Output: {0, 9, 12, 14, 23}

Input: arr[] = {7, 0, 2}
Output: {0, 2, 7}

方法:
可以采用多种方式对数组进行升序排序,例如:

  • 选择排序
  • 二进制排序
  • 合并排序
  • 基数排序
  • 插入排序等

为简单起见,我们将在本文中使用选择排序。
可以通过从未排序部分重复查找最小元素(考虑升序)并将其放在开头来对数组进行升序排序。该算法在给定数组中维护两个子数组。

  1. 已排序的子数组。
  2. 剩余的未排序的子数组。

在选择排序的每次迭代中,都会从未排序的子数组中选取最小元素(考虑升序)并将其移至已排序的子数组。
下面是上述方法的实现:

C
// C program to sort the array in an
// ascending order using selection sort
 
#include 
 
void swap(int* xp, int* yp)
{
    int temp = *xp;
    *xp = *yp;
    *yp = temp;
}
 
// Function to perform Selection Sort
void selectionSort(int arr[], int n)
{
    int i, j, min_idx;
 
    // One by one move boundary of unsorted subarray
    for (i = 0; i < n - 1; i++) {
 
        // Find the minimum element in unsorted array
        min_idx = i;
        for (j = i + 1; j < n; j++)
            if (arr[j] < arr[min_idx])
                min_idx = j;
 
        // Swap the found minimum element
        // with the first element
        swap(&arr[min_idx], &arr[i]);
    }
}
 
// Function to print an array
void printArray(int arr[], int size)
{
    int i;
    for (i = 0; i < size; i++)
        printf("%d ", arr[i]);
    printf("\n");
}
 
// Driver code
int main()
{
    int arr[] = { 0, 23, 14, 12, 9 };
    int n = sizeof(arr) / sizeof(arr[0]);
    printf("Original array: \n");
    printArray(arr, n);
 
    selectionSort(arr, n);
    printf("\nSorted array in Ascending order: \n");
    printArray(arr, n);
 
    return 0;
}


输出:
Original array: 
0 23 14 12 9 

Sorted array in Ascending order: 
0 9 12 14 23

时间复杂度: O(N 2 )

辅助空间: O(1)

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。