for-麻烦看看这个程序为什么不能选择排序

问题描述

麻烦看看这个程序为什么不能选择排序

#include
int main(void){
int n,a[10],i,j,t,index;

printf("Input n: ");
scanf("%d",&n);

for(i=0;i<n;i++)
    scanf("%d",&a[i]);
    for (i=0;i<n;i++){
        index=i;
        for(j=1;j<n;j++){
            if (a[j]<a[index])
                index=j;
                a[index]=t;
                a[index]=a[i];
                a[i]=t;}}

                printf("After:");
                for (i=0;i<n;i++)

                printf("%d",&a[i]);
                return 0 ;}

解决方案

代码应该为以下

 #include
int main(void)
{
    int n,a[10],i,j,t,index;
    printf("Input n: ");
    scanf("%d",&n);

    for(i=0;i<n;i++)
        scanf("%d",&a[i]);

    for (i=0;i<n;i++)
    {
        index=i;
        for(j=1;j<n;j++){
            if (a[j]<a[index])
            {
                index=j;
                a[index]=t;
                a[index]=a[i];
                a[i]=t;
            }
        }
    }

    printf("After:");
    for (i=0;i<n;i++)
    printf("%d",&a[i]);
    return 0 ;
}

解决方案二:

试了试,代码还有问题,改成这个试试

 #include
int main(void)
{
    int n,a[10],i,j,t;
    printf("Input n: ");
    scanf("%d",&n);

    for(i=0;i<n;i++)
        scanf("%d",&a[i]);

    for (i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++){
            if (a[j]<a[i])
            {
                t=a[i]
                a[i]=a[j];
                a[j]=t;
            }
        }
    }

    printf("After:");
    for (i=0;i<n;i++)
    printf("%d",&a[i]);
    return 0 ;
}

解决方案三:

CSDN首答,不知道为什么你的代码给我一种不太像选择排序的感觉,选择排序不是选出当前候选集最小(大)的数,然后交换么?

#include
int main(void){
int n,a[10],i,j,t,index;
printf("Input n: ");
scanf("%d",&n);

for(i=0;i<n;i++)
scanf("%d",&a[i]);
for (i=0;i<n;i++){
index=i;
for(j=i+1;j<n;j++){//下标号是随i值而浮动的
if (a[j]<a[index])
index=j;
}//找出当前最小数的下标
if(index!=i)//如果和i不等,则交换
{
t=a[index];
a[index]=a[i];
a[i]=t;

}
}

            printf("After:");
            for (i=0;i<n;i++)

            printf("%d ",a[i]);//多加一个空格,增强可读性,去掉&
            return 0 ;
           }

代码风格丑丑的。。。

解决方案四:

if (a[j]<a[index])
后面缺少花括号

解决方案五:

  • 1.

    a[index]=t;
    a[index]=a[i];
    a[i]=t;

    *你这个交换的结果是什么?t的值是哪里来的?
  • 2.你的j循环每次都从1开始,那么每次都是选出了最小的数(从1开始),所以每次选出的都是同一个数

解决方案六:

                    a[index]=t;
                a[index]=a[i];
                a[i]=t;

这部分交换两个变量的错了,第一行应该是t=a[index]
最后的printf("%d",&a[i]);你应该是想输出a[i]吧,不要加"&"。

解决方案七:

选择排序是最基础的排序,是需要熟练掌握的。http://c.biancheng.net/cpp/html/2442.html

时间: 2024-11-01 14:01:34

for-麻烦看看这个程序为什么不能选择排序的相关文章

c语言-简单选择排序 时间限制: 40 Sec 内存限制: 128 MB

问题描述 简单选择排序 时间限制: 40 Sec 内存限制: 128 MB 题目描述 编一程序用简单选择排序方法对n个整数排序(从大到小). 对n个数进行降序排列,简单选择排序的算法思想如下: 1)首先通过n-1次比较,从n个元素中找出值最大的元素,将它与第一个元素交换.(第一趟排序). 2)再通过n-2次比较,从剩余的n-1个元素中找出值次大的元素,将它与第二个元素交换.(第二趟排序). 3)重复上述操作,共进行n-1趟排序后,排序结束. 输入 先输入整数个数n(n<=100000) 然后输入

算法 选择排序-请教一个选择排序的算法问题

问题描述 请教一个选择排序的算法问题 你好, 我刚刚开始接触JAVA, 问一个选择排序的问题. private static void SelectionSort (int[] arr) { for(int i=0; i for(int j=i+1;j if (arr[i] > arr[j]) { int m; m = arr[i]; arr[i] = arr[j]; arr[j] = m; } } } } 这个方法正确,但是交换次数多了,所以我想改进一下. private static voi

经验之谈:网站程序与关键词选择马虎不得

随着互联网的发展,网络推广显得越来越重要,无论是企业还是个人都想通过网络实现自己的业务拓展从而提高自己的收入,于是就涌现出许许多多的网站与站长,企业不多说(下面说明原因),这里说说个人站长(特别是新手站长)应该如何更好的通过互联网创富. 进行网络推广必须要有自己的网站,所以就需要网站程序. "网站程序?我不了解呀,怎么办?"程序是新手感到迷茫的方面之一,我也不例外,乍一听网站建设需要程序,自然而然的就会想到是不是需要学习asp.php等比较深奥的东西啊,是不是需要自己动手编写程序啊等等

c语言-此程序为何当选择1的时候没有矩阵输出,好像是形参与实参的关系错了,求解释,求改正。

问题描述 此程序为何当选择1的时候没有矩阵输出,好像是形参与实参的关系错了,求解释,求改正. // juzhen 2.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "stdlib.h" typedef struct mat { int nRow; /* 行数 / int nCol; / 列数 / int pData; /* 指向矩?

c-大神们!编译时特殊标记行为什么通不过编译,错在哪?这是一个选择排序的程序!

问题描述 大神们!编译时特殊标记行为什么通不过编译,错在哪?这是一个选择排序的程序! #include int main() { void sort(int array[],int n); int n,i; scanf("%d",&n); int a[200]; for(i=0;i<n;i++) scanf("%d",&a[i]); ** void (a,n);** for(i=0;i<n;i++) printf("%d&quo

在ubuntu使用gcc编译一个基本签名算法出现 段错误 核心已转储 麻烦给看看程序有什么错误。

问题描述 在ubuntu使用gcc编译一个基本签名算法出现 段错误 核心已转储 麻烦给看看程序有什么错误. 可能程序存在不止一个错误,如果可以,麻烦一一指出 如果哪位高手能帮忙让程序跑出结果,我把剩下的140C送给他作为感谢! #include "pbc.h" int main(void) { pairing_t pairing; element_t g, h; element_t public_key, sig; element_t secret_key; element_t tem

《MacTalk 跨越边界》一一2.2程序员如何选择技术方向

2.2程序员如何选择技术方向 MacTalk 跨越边界 最近写了<程序员真正的价值>和<当程序员老去>两篇文章,传播甚广,今天是第三篇--<程序员如何选择技术方向>,史称"程序员三部曲". 那之前写的几篇程序员文章算什么呢?算前传吧.以后再写程序员文章算什么呢?算后记吧. 2008年秋天的一个午后,温暖的阳光透过落地窗落在我面前这个长长的写字桌上,桌子对面坐的是一个瘦小的程序员,他的名字叫小明,小明有些茫然,他看着我,不知道该说些什么. 程序员都是很

vc++-用VC++做N*N最大值滤波时,运行没问题,但一点滤波图像出来就一片灰的,麻烦看一下程序是否有错

问题描述 用VC++做N*N最大值滤波时,运行没问题,但一点滤波图像出来就一片灰的,麻烦看一下程序是否有错 void CZHANGMIN1View::OnMmf() { //N*N最大值滤波 CZHANGMIN1Doc* pDoc = GetDocument(); int iH,iW; LPSTR lpDIB; LPSTR lpDIBBits; lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());// 找到DIB图像象素起始位置 if

《C语言程序设计》一 第 3 章 程序的控制结构Ⅰ——选择结构程序设计

第 3 章 程序的控制结构Ⅰ--选择结构程序设计 前面提到过,从程序流程的角度来看,程序可以分为三种基本结构,即顺序结构.选择结构和循环结构,这三种基本结构通过组合和嵌套可以写出各种复杂的程序.顺序结构比较简单,前面已作过简要介绍,本章将介绍选择结构,第4章将介绍循环结构.