鱼C论坛

 找回密码
 立即注册
查看: 4511|回复: 8

[已解决]求助 5种内排序方法执行过程共几趟

[复制链接]
发表于 2020-12-23 21:41:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问大佬们5种内排序方法:
插入排序
冒泡排序(起泡排序)
快速排序
简单选择排序
堆排序
这5种内排序方法的执行过程共几趟呀?
最佳答案
2020-12-24 16:37:33
欧德奈瑞 发表于 2020-12-24 16:21
我是想请问那5种内排序方法的 执行过程 共 几趟哩

我晕,执行过程,谁会数执行了多少步呀?
你若有时间、有兴趣,不妨自己去数一数(用调试功能,步进执行。例如,你使用 VS2015编译器,先设下一个断点,然后用 F11,执行一步,数一步。若使用 VC++6.0,步进调试用 F10)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-23 22:02:00 | 显示全部楼层
// 对于序列{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[7] = {15,9,7,8,20,-1,4};
    for(i = 0;i < 6;i++)               //从首位开始,最后一个数被动和前面所有数进行了比较
    {
        min = i;
        for(j = i + 1;j < 7;j++)       //依次和后面的数比较找出最小的数
                {
            if(array[j] < array[min])
                        {
                min = j;
                        }
                }
        if(min != i)                   //如果最小的数不是首位,则交换
                {
            swap(&array[min],&array[i]);
                }
    }
    for(i = 0;i < 7;i++)
        {
        printf("%d ",array[i]);
        }
        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[start];
    while(start < end)
    {
        while(start < end && arr[end] > arrBase)
                {
            end--;
                }
        if(start < end)
                {
            swap(&arr[start], &arr[end]);
            start++;
                }

        while(start < end && arr[start] < arrBase)
                {
            start++;
                }
        if(start < end)
        {
            swap(&arr[start], &arr[end]);
            end--;
        }
    }
    arr[start] = arrBase;
    arrMiddle = start;

    //分治方法进行递归
    quickSort(arr,tempStart,arrMiddle-1);
    quickSort(arr,arrMiddle+1,tempEnd);
}


int main()
{
    int i;
        int array[7] = {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[i]);
        }
        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[j];
             for(k = j - i;k >= 0 && temp < arr[k];k -= i)
                         {
                 arr[k + i] = arr[k];
                         }
             arr[k + i] = temp;
                 }
         }
     for(i = 0;i < size;i++)
         {
         printf("%d ",arr[i]);
         }
         printf("\n");
}

void main()
{
    int array[7] = {15,9,7,8,20,-1,4};
    shell_sort(array,7);  
}

#endif


// 冒泡法排序
#if(1)
# include<stdio.h>

int main()
{
    int array[7] = {15,9,7,8,20,-1,4};
    int n;                             // 存放数组a中元素的个数
    int i;                             // 比较的轮数
    int j;                             // 每轮比较的次数
    int buf;                           // 交换数据时用于存放中间数据
    n = sizeof(array) / sizeof(array[0]);      // a[0]是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[j] > array[j + 1])
            {
                buf = array[j];
                array[j] = array[j + 1];
                array[j + 1] = buf;
            }
        }
    }
    for (i = 0;i < n;++i)
    {
        printf("%d, ",array[i]);
    }
    printf("\n");
    return 0;
}

#endif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-24 07:37:07 | 显示全部楼层

大佬 您好像有点答非所问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-24 09:13:31 | 显示全部楼层
欧德奈瑞 发表于 2020-12-24 07:37
大佬 您好像有点答非所问

你不是要排序法吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-24 16:21:54 | 显示全部楼层

我是想请问那5种内排序方法的 执行过程 共 几趟哩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-24 16:37:33 | 显示全部楼层    本楼为最佳答案   
欧德奈瑞 发表于 2020-12-24 16:21
我是想请问那5种内排序方法的 执行过程 共 几趟哩

我晕,执行过程,谁会数执行了多少步呀?
你若有时间、有兴趣,不妨自己去数一数(用调试功能,步进执行。例如,你使用 VS2015编译器,先设下一个断点,然后用 F11,执行一步,数一步。若使用 VC++6.0,步进调试用 F10)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-12-24 16:47:34 | 显示全部楼层
风过无痕1989 发表于 2020-12-24 16:37
我晕,执行过程,谁会数执行了多少步呀?
你若有时间、有兴趣,不妨自己去数一数(用调试功能,步进执行 ...

我觉得大佬的建议很棒不过我大概率不会去做就是了虽然这个问题是期末复习老师给我们的重点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-24 17:16:46 | 显示全部楼层
欧德奈瑞 发表于 2020-12-24 16:47
我觉得大佬的建议很棒不过我大概率不会去做就是了虽然这个问题是期末复习老师给我们 ...

不想去数,你可以用 DEV_C++ 等有运行计时的编译器,记录一下它们各种排序的时间倒是不妨
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-12-24 19:54:36 | 显示全部楼层
风过无痕1989 发表于 2020-12-24 17:16
不想去数,你可以用 DEV_C++ 等有运行计时的编译器,记录一下它们各种排序的时间倒是不妨

好的 大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 12:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表