C语言实现选择排序算法详解

需积分: 5 0 下载量 73 浏览量 更新于2024-10-22 收藏 728B ZIP 举报
资源摘要信息: "c代码-选择法排序" 选择排序算法是一种简单直观的排序方法,属于基础算法之一。它的工作原理是在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 选择排序的主要特点如下: 1. 算法复杂度:选择排序算法的时间复杂度为O(n^2),无论最好情况、平均情况还是最坏情况都是如此。这是因为对于长度为n的数组,选择排序需要进行n-1次选择操作,而每次选择操作都包含n-i次比较(其中i为已经选择的位置)。因此,总的比较次数为n(n-1)/2,这是一个二次函数,所以复杂度是O(n^2)。 2. 稳定性:选择排序是一种不稳定的排序算法。所谓排序算法的稳定性,是指排序后两个相等的元素的相对位置是否发生变化。在选择排序中,当找到一个最小元素并将其放到排序序列的起始位置时,可能会跨越多个相同的元素,这可能会改变这些相同元素之间的相对位置。 3. 内存使用:选择排序是一种原地排序算法,它不需要额外的存储空间,除了输入的待排序数组外,只需要常数级别的额外空间用于变量交换,因此空间复杂度为O(1)。 4. 适用场景:由于选择排序的时间复杂度较高,对于大数据量的排序效率不高。但是由于其简单易于实现,且不需要额外空间,对于小规模数据的排序还是可以考虑的,尤其在空间复杂度敏感的场合。 下面是使用C语言实现的选择排序算法的示例代码: ```c #include <stdio.h> // 函数声明 void selectionSort(int arr[], int n); void swap(int* a, int* b); void printArray(int arr[], int size); // 主函数 int main() { int arr[] = {64, 25, 12, 22, 11}; int n = sizeof(arr)/sizeof(arr[0]); selectionSort(arr, n); printf("Sorted array: \n"); printArray(arr, n); return 0; } // 选择排序函数 void selectionSort(int arr[], int n) { int i, j, min_idx; for (i = 0; i < n-1; i++) { // 找到最小元素的索引 min_idx = i; for (j = i+1; j < n; j++) if (arr[j] < arr[min_idx]) min_idx = j; // 将找到的最小元素与第i个位置的元素交换 swap(&arr[min_idx], &arr[i]); } } // 用于交换两个元素的函数 void swap(int* a, int* b) { int t = *a; *a = *b; *b = t; } // 打印数组的函数 void printArray(int arr[], int size) { int i; for (i = 0; i < size; i++) printf("%d ", arr[i]); printf("\n"); } ``` 在上述代码中,`selectionSort`函数实现了选择排序的核心逻辑,`swap`函数用于交换两个元素的值,`printArray`函数用于打印数组。程序首先定义了一个待排序的数组`arr`,然后调用`selectionSort`对其进行排序,最后通过`printArray`打印排序后的数组。 选择排序虽然在效率上不是最优的,但是由于其算法简单,容易理解和实现,因此在教学和一些对效率要求不是很高的场合仍然是一个不错的选择。