求助 5种内排序方法执行过程共几趟
请问大佬们5种内排序方法:插入排序
冒泡排序(起泡排序)
快速排序
简单选择排序
堆排序
这5种内排序方法的执行过程共几趟呀?
// 对于序列{15, 9, 7, 8, 20, -1, 4}进行排序,进行一趟后数据序列为{4, 9, -1, 8, 20, 7, 15},则采用的是什么排序?
// 选择法排序
#if(0)
# include<stdio.h>
void swap(int *p,int *q)
{
int temp;
temp = *p;
*p = *q;
*q = temp;
}
int main()
{
int i,j,min;
int array = {15,9,7,8,20,-1,4};
for(i = 0;i < 6;i++) //从首位开始,最后一个数被动和前面所有数进行了比较
{
min = i;
for(j = i + 1;j < 7;j++) //依次和后面的数比较找出最小的数
{
if(array < array)
{
min = j;
}
}
if(min != i) //如果最小的数不是首位,则交换
{
swap(&array,&array);
}
}
for(i = 0;i < 7;i++)
{
printf("%d ",array);
}
printf("\n");
}
#endif
// 快速法排序
#if(0)
#include <stdio.h>
#include <stdlib.h>
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void quickSort(int arr[] ,int start, int end)
{
int arrBase, arrMiddle;
int tempStart = start,
tempEnd = end;
//对于这种递归的函数,内部必须要有一个函数返回的条件
if(tempStart >= tempEnd)
return;
//拷贝一个基准值作为后面比较的参数
arrBase = arr;
while(start < end)
{
while(start < end && arr > arrBase)
{
end--;
}
if(start < end)
{
swap(&arr, &arr);
start++;
}
while(start < end && arr < arrBase)
{
start++;
}
if(start < end)
{
swap(&arr, &arr);
end--;
}
}
arr = arrBase;
arrMiddle = start;
//分治方法进行递归
quickSort(arr,tempStart,arrMiddle-1);
quickSort(arr,arrMiddle+1,tempEnd);
}
int main()
{
int i;
int array = {15,9,7,8,20,-1,4};
int arrLength = sizeof(array)/sizeof(int);
quickSort(array,0,arrLength-1);
for(i = 0; i < arrLength; i++)
{
printf("%d ",array);
}
printf("\n");
return 0;
}
#endif
// 希尔法排序
#if(0)
# include<stdio.h>
void shell_sort(int arr[],int size)
{
int i,j,k,temp;
for(i = size / 2;i > 0;i /= 2)
{
for(j = i;j < size;j++)
{
temp = arr;
for(k = j - i;k >= 0 && temp < arr;k -= i)
{
arr = arr;
}
arr = temp;
}
}
for(i = 0;i < size;i++)
{
printf("%d ",arr);
}
printf("\n");
}
void main()
{
int array = {15,9,7,8,20,-1,4};
shell_sort(array,7);
}
#endif
// 冒泡法排序
#if(1)
# include<stdio.h>
int main()
{
int array = {15,9,7,8,20,-1,4};
int n; // 存放数组a中元素的个数
int i; // 比较的轮数
int j; // 每轮比较的次数
int buf; // 交换数据时用于存放中间数据
n = sizeof(array) / sizeof(array); // a是int型, 占4字节, 所以总的字节数除以4等于元素的个数
for (i = 0; i < n - 1;++i) // 比较n-1轮
{
for (j = 0; j < n - 1 - i;++j) // 每轮比较n-1-i次,
{
if (array > array)
{
buf = array;
array = array;
array = buf;
}
}
}
for (i = 0;i < n;++i)
{
printf("%d, ",array);
}
printf("\n");
return 0;
}
#endif 风过无痕1989 发表于 2020-12-23 22:02
大佬 您好像有点答非所问{:10_250:} 欧德奈瑞 发表于 2020-12-24 07:37
大佬 您好像有点答非所问
你不是要排序法吗? 风过无痕1989 发表于 2020-12-24 09:13
你不是要排序法吗?
我是想请问那5种内排序方法的 执行过程 共 几趟哩{:10_266:} 欧德奈瑞 发表于 2020-12-24 16:21
我是想请问那5种内排序方法的 执行过程 共 几趟哩
我晕,执行过程,谁会数执行了多少步呀?
你若有时间、有兴趣,不妨自己去数一数(用调试功能,步进执行。例如,你使用 VS2015编译器,先设下一个断点,然后用 F11,执行一步,数一步。若使用 VC++6.0,步进调试用 F10) 风过无痕1989 发表于 2020-12-24 16:37
我晕,执行过程,谁会数执行了多少步呀?
你若有时间、有兴趣,不妨自己去数一数(用调试功能,步进执行 ...
我觉得大佬的建议很棒{:10_254:}不过我大概率不会去做就是了{:10_327:}虽然这个问题是期末复习老师给我们的重点 欧德奈瑞 发表于 2020-12-24 16:47
我觉得大佬的建议很棒不过我大概率不会去做就是了虽然这个问题是期末复习老师给我们 ...
不想去数,你可以用 DEV_C++ 等有运行计时的编译器,记录一下它们各种排序的时间倒是不妨 风过无痕1989 发表于 2020-12-24 17:16
不想去数,你可以用 DEV_C++ 等有运行计时的编译器,记录一下它们各种排序的时间倒是不妨
{:10_256:}好的 大佬
页:
[1]