给定大小为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}
方法:
可以采用多种方式对数组进行升序排序,例如:
- 选择排序
- 二进制排序
- 合并排序
- 基数排序
- 插入排序等
为简单起见,我们将在本文中使用选择排序。
可以通过从未排序部分重复查找最小元素(考虑升序)并将其放在开头来对数组进行升序排序。该算法在给定数组中维护两个子数组。
- 已排序的子数组。
- 剩余的未排序的子数组。
在选择排序的每次迭代中,都会从未排序的子数组中选取最小元素(考虑升序)并将其移至已排序的子数组。
下面是上述方法的实现:
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基础课程》。