私人定制网站,关于建设工程招标类的公共网站,外贸网站建设视频教程,无锡网站建设无锡网络推广什么是选择排序#xff1f;
选择排序是一种简单直观的排序算法#xff0c;它的核心思想是每次从未排序的元素中选择最小#xff08;或最大#xff09;的元素#xff0c;然后将其放到已排序序列的末尾。通过重复这个过程#xff0c;直到所有元素都排好序为止。
选择排序…什么是选择排序
选择排序是一种简单直观的排序算法它的核心思想是每次从未排序的元素中选择最小或最大的元素然后将其放到已排序序列的末尾。通过重复这个过程直到所有元素都排好序为止。
选择排序的详细步骤
1、首先从待排序的数组中找到最小或最大的元素记为最小元素。 2、将最小元素与数组的第一个元素进行交换将最小元素放到已排序序列的末尾。 3、接下来在剩余的未排序元素中再次寻找最小或最大的元素重复步骤2。 4、重复执行上述步骤直到所有元素都排好序。
举例说明
假设我们有以下待排序的数组[5, 2, 9, 1, 5, 6]。
第一轮 在数组中找到最小的元素这是1。然后将1与数组的第一个元素即5交换位置。数组变为[1, 2, 9, 5, 5, 6]。
第二轮 在未排序的部分中[2, 9, 5, 5, 6]找到最小元素这是2。将2与未排序部分的第一个元素即2交换位置。数组保持不变为[1, 2, 9, 5, 5, 6]。
第三轮 在未排序的部分中[9, 5, 5, 6]找到最小元素这是5。将5与未排序部分的第一个元素即9交换位置。数组变为[1, 2, 5, 9, 5, 6]。
第四轮 在未排序的部分中[9, 5, 6]找到最小元素这是5。将5与未排序部分的第一个元素即9交换位置。数组变为[1, 2, 5, 5, 9, 6]。
第五轮 在未排序的部分中[9, 6]找到最小元素这是6。将6与未排序部分的第一个元素即9交换位置。数组变为[1, 2, 5, 5, 6, 9]。
最终整个数组变得有序[1, 2, 5, 5, 6, 9]。
关键
选择排序的关键点是每一轮内层循环都找到了当前范围内的最小或最大元素并将其放到已排序序列的末尾。通过不断缩小排序范围每次排序都能找到最小或最大的元素并逐步构建有序序列。
示例代码
#include stdio.hvoid ChoiceSort(int arr[], int length);int main()
{int arr[] {5, 2, 9, 1, 5, 6};/*不可以放在函数内部 当数组作为函数参数传递给函数时数组参数会被转换为指针类型因此在函数内部无法通过sizeof操作符获取数组的长度。*/int length sizeof(arr) / sizeof(arr[0]);ChoiceSort(arr, length);return 0;
}void ChoiceSort(int arr[], int length)
{int i, j, k;for (i 0; i length; i){int minIndex i; // 最小数的下标每个循环开始总是假设第一个数最小 for (j i 1; j length; j){if (arr[j] arr[minIndex]) // 找到最小的数 {minIndex j; // 保存最小数的索引 }}printf(第%d轮最小数为%d\n,i1,arr[minIndex]);int temp arr[minIndex];arr[minIndex] arr[i];arr[i] temp;for (k 0; k length; k){printf(%d , arr[k]);}printf(\n\n); }
}