选择排序 选择法排序是相对好理解的排序算法。假设要对含有n个数的序列进行升序排列,算法步骤是: 1、从数组存放的n个数中找出最小数的下标(算法见下面的“求最值”),然后将最小数与第1个数交换位置; 2、除第1个数以外,再从其余n-1个数中找出最小数(即n个数中的次小数)的下标,将此数与第2个数交换位置...
voidshellSort(int*arr,intsize){// 用于存储间隔的变量intgap;// 用于暂存元素值的临时变量inttmp;/*** Knuth(克努特)序列是希尔排序中常用的间隔序列,其中 gap 是间隔的初始值,通常取数组长度的三分之一* Knuth 序列的生成规则是依次递增间隔直到大于等于数组长度的三分之一,然后递减间隔直到 1* 计算公式:g...
冒泡排序是一种简单的排序算法。它重复地遍历要排序的数组,每次比较相邻的两个元素,如果它们的顺序错误就交换它们。遍历数组的过程会把最大的元素“冒泡”到数组的末尾。在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:...
堆排序是一种基于完全二叉堆的排序算法,其基本思想是首先将待排序的数组构建成一个最大堆,然后将堆顶元素与最后一个元素交换位置,然后调整堆,再取出堆顶元素,以此类推。具体实现过程如下: c void heapSort(int arr[], int n) { for (int i = n/2 - 1; i >= 0; i) { ...
int a[Num];//数组a用来存放要排序的数字 //---输入需要排序的数--- printf("请依次输入要排序的数字:\n"); for(i=0;i<Num;i++)//for循环用来循环为数组a输入要排序的数字 { scanf("%d",&a[i]); } //---排序核心算法--- for(i=...
1.冒泡排序(Bubble Sort)冒泡排序是一种基础的排序算法,它的核心思想是比较相邻的两个元素,如果顺序不对就交换位置,直到整个数组都有序为止。具体实现过程如下:从数组的第一个元素开始,依次比较相邻的两个元素,如果前面的元素比后面的元素大,则交换它们的位置。对于整个数组,重复以上操作,直到没有任何相邻的...
选择排序: 设有数组a[],选择排序顾名思义就是选出还没排序的数中的最小值将其排在已排好的数的后一位,例如对下列数进行选择排序,每一次的结果: 5,3,4,2,7,6,1,8//共n个数 第0趟: (1),3,4,2,7,6,5,8//选择1将其和5的位置进行交换 ...
1.冒泡排序(Bubble Sort)冒泡排序是一种简单的排序算法,其基本思想是通过相邻元素的比较和交换,使较大的元素逐渐往后移动,从而实现排序。该算法的名称源于这样的过程:在排序过程中,较小的元素像气泡一样逐渐浮到数组的顶部。冒泡排序的具体实现过程如下:从数组的第一个元素开始,依次比较相邻的两个元素,如果...
例如,给定一个数组 arr = [9, 6, 15, 4, 2],我们要对它进行升序排序,那么选择排序的过程如下:第一轮,从 arr[0] 到 arr[4] 中找到最小的元素 arr[4] = 2,将它与 arr[0] 交换,得到 arr = [2, 6, 15, 4, 9]。第二轮,从 arr[1] 到 arr[4] 中找到最小的元素 arr[3] = 4,...
冒泡排序通过多次遍历数组,比较并交换相邻元素,逐步将较小元素“浮”到数组顶端,时间复杂度为O(n^2)。选择排序通过选择未排序部分的最小元素进行交换,逐步完成整个数组排序,同样具有O(n^2)的时间复杂度。插入排序将数组分为已排序和未排序部分,逐个插入未排序元素到已排序部分的合适位置,时间复杂度为O(n^2)。