C 这是冒泡排序还是插入排序?
我通过理解插入排序算法编写了这段代码。我的老师说是气泡式的,但我的朋友说是插入式的。有人能检查一下并向我简要介绍一下吗C 这是冒泡排序还是插入排序?,c,C,我通过理解插入排序算法编写了这段代码。我的老师说是气泡式的,但我的朋友说是插入式的。有人能检查一下并向我简要介绍一下吗 #include <stdio.h> void sort(int n) { int i, j; float arr[n], k; for (i = 0; i <= n - 1; i++) { printf("Enter the number"); scanf("%f", &arr[i]); } for (i = 1
#include <stdio.h>
void sort(int n) {
int i, j;
float arr[n], k;
for (i = 0; i <= n - 1; i++) {
printf("Enter the number");
scanf("%f", &arr[i]);
}
for (i = 1; i <= n - 1; i++) {
j=i
while (arr[j] < arr[j - 1] && j > 0) {
k = arr[j - 1];
arr[j - 1] = arr[j];
arr[j] = k;
/*printf("\n\t%f",arr[j]);*/
j--;
/*printf("\n%d",j);*/
}
/*printf("\n%d",x[i]);*/
}
for (i = 0; i < n; i++) {
printf("\n%f", arr[i]);
}
}
int main() {
int t;
printf("Enter the number of values to be sorted");
scanf("%d", &t);
sort(t);
}
#包括
无效排序(整数n){
int i,j;
浮动arr[n],k;
for(i=0;i对我来说看起来两者都不一样。它可能是插入排序,因为您总是在数组的未排序部分中取第一个元素,并将其放置在数组的已排序部分的正确位置。但是,插入不是通过将所有必要的元素向右移动1个元素,然后将选定的元素插入到正确的位置来完成的(我想说的是,标准的插入排序是这样的),但它会将所选元素与左侧的1个元素交换,直到所选元素位于正确的位置
由于数组的“排序”和“未排序”部分,我会说插入排序
由于交换了相邻元素,我会说是冒泡排序
然而,在我看来,这更像是插入排序。如果不是(低效的)交换,您将只将左元素移到右,并且只最终将所选元素写入左(所选元素的最终正确位置),这将是一个很好的插入排序这是一个冒泡排序
算法。冒泡排序
算法和您的算法之间的唯一区别是冒泡排序
算法先排序最右边的元素,然后依次排序,您的算法先排序最左边的元素
分析:
你的算法:
<---------
<--------
<-------
<------
<-----
<----
<---
<--
<-
<
我想说的是更接近插入排序,因为您通过查找第一个不匹配项来创建排序块。而不是迭代整个数组并将最大的元素推到末尾(如冒泡排序)
它更接近插入排序的标准版本,即交换元素直到在已排序的块中找到正确的位置。但是,插入元素后,索引从错误的索引开始,因为它创建了一个已排序的子数组
这有助于可视化两种排序算法:
这是插入/冒泡排序的最差版本。我同意你的观点。这个概念肯定是插入排序
,但交换效率低下是可以避免的。另外I
在while
和for
之间共享,这会导致进一步的效率低下。我不同意它只是从右到左/左右差为t。在冒泡排序中,数组中的最后一个元素在外循环的每次迭代中向上移动到1个位置。有问题的是,直到外循环的最后一次迭代,最后一个元素才移动。@TomášZahradníček是对的,如果这是bubblesort的相反结果,则最小的元素应该位于第一个索引处。
------>
----->
---->
--->
-->
->
>