数据结构: 已知序列(23,18,52,83,67,6,1,12,36),请用选择排序写出每一趟排序的结果

如题所述

[选择排序]的过程,从小到大排序:

(00)   23  18  52  83  67   6   1  12  36
(01)    1  18  52  83  67   6  23  12  36
(02)    1   6  52  83  67  18  23  12  36
(03)    1   6  12  83  67  18  23  52  36
(04)    1   6  12  18  67  83  23  52  36
(05)    1   6  12  18  23  83  67  52  36
(06)    1   6  12  18  23  36  67  52  83
(07)    1   6  12  18  23  36  52  67  83
(08)    1   6  12  18  23  36  52  67  83

排序的过程保存在文件 d:\\selectSort.txt


#include<stdio.h>

char fileName[]="d:\\selectSort.txt";
int printIndex;
int writeindex;

void printData(int *a,int n) //屏幕打印数据
{
    int i;
    printf("(%02d) ",printIndex);
    for(i=0;i<n;i++)
    {
       printf("%4d",a[i]);
    }
    printf("\n");
    printIndex++;
}

void writeFile(int *a,int n) //排序过程写入文件
{
    FILE *fp;
    int i;

    fp=fopen(fileName,"a"); //"a"以附加的方式打开只写文件
    if(fp == NULL)
    {
        printf("\n打开文件 %s 时出错.\n",fileName);
        return;
    }
    fprintf(fp,"(%02d) ",writeindex);
    for(i=0;i<n;i++)
    {
        fprintf(fp,"%4d",a[i]);
    }
    fprintf(fp,"\n");

    fclose(fp); //关闭文件

    writeindex++;
}

void select_sort(int *a,int n) //选择排序
{
    int i,j,min,temp;
    for(i=0;i<n-1;i++)
    {
        min=i;
        for(j=i+1;j<n;j++)
        {
            if(a[min] > a[j]) //从小到大排序
            {
                min=j;
            }
        }
        if(i != min)
        {
            temp=a[i];
            a[i]=a[min];
            a[min]=temp;
        }
        printData(a,n);
        writeFile(a,n);
    }
}

int main()
{
    int a[]={23,18,52,83,67,6,1,12,36};
    int n;

    n=sizeof(a)/sizeof(int); //整数的数量
    printIndex=0;
    writeindex=0;
    printData(a,n);
    writeFile(a,n);

    //调用[选择排序]函数(从小到大排序)
    select_sort(a,n);

    printf("\n排序的过程保存在文件 %s\n",fileName);

    return 0;
}

温馨提示:答案为网友推荐,仅供参考
相似回答