FrankenChen 2018-11-13 14:51 采纳率: 100%
浏览 500
已采纳

这是一个C++的排序算法,运行结果总是不正确,求大神帮帮忙改一下

(1)随机生成一组关键码(关键码为整型,取值范围为0~99);
(2)采用插入排序算法进行排序,输出排序结果;
(3)采用交换排序算法进行排序,输出排序结果;
(4)采用选择排序算法进行排序,输出排序结果;

 #include <iostream>
#include <string>
#include <ctime>
#include <stdlib.h>
using namespace std;
//插入排序
void insertSort(int r[],int n)
{
    int i,j;
    for (i=2;i<=n;i++){
        r[0]=r[i];
        for( j=i-1;r[0]<r[j];j--)
            r[j+1]=r[j];
        r[j+1]=r[0];
    }
}
//交换排序
void BubbleSort(int r[],int n)
{
    int i,j;
    for (i = 0; i < n-1; i++){
        for (j= 0; j < n-1-i; j++){
            if (r[j] > r[j+1]){
                int temp = r[j+1];
                r[j+1] = r[j];
                r[j] = temp;
            }
        }
    }
}
//选择排序
void SelectSort(int r[],int n){
    int i,j;
    for (i=1; i < n; i++){
        int index = i;
        for (j=i+1; j<=n;j++){
            if (r[j] < r[index]){
                index = j;
            }
        }                   //找到了最小的值再交换
        if(index!=i){
        int temp = r[i];
        r[i] = r[index];
        r[index] = temp;
        }
    }
}
void useRand(int r[],int size)
{
    srand((unsigned)time(NULL));
    cout << "the rand number is:" <<endl;
        for(int i=0;i<=9;i++)
        {
            r[i]=rand()%99+1;
            cout  << r[i] << ",";
        }
        cout << endl;
}
void copy(int a[],int b[],int n)
{
    for(int i=0;i<n;i++)
        b[i]=a[i];
}
void print(int a[10],int n)
{
    for(int i=0;i<n;i++)
        cout << a[i] << ",";
    cout << endl;
}
int main(){
    int r[10],a[10],b[10],c[10];
    useRand(r,10);
    copy(r,a,10);
    copy(r,b,10);
    copy(r,c,10);
    insertSort(a,10);
    cout << "插入排序后:" << endl;
    print(a,10);
    BubbleSort(b,10);
    cout << "交换排序后:" << endl;
    print(b,10);
    SelectSort(c,10);
    cout << "选择排序后:" << endl;
    print(c,10);
    return 0;
}

  • 写回答

2条回答 默认 最新

  • Italink 2018-11-13 15:26
    关注

    除了交换,其他都有错,看注释

     void insertSort(int r[], int n)
    {
        int i, j;
        int t;              //不能用r[0]暂时存储准备插入的元素,用另一个变量t
        for (i = 0; i < n; i++) {       //从0开始,不能等于n
            t = r[i];
            for (j = i - 1; t < r[j]; j--)
                r[j + 1] = r[j];
            r[j + 1] = t;
        }
    }
    //交换排序
    void BubbleSort(int r[], int n)
    {
        int i, j;
        for (i = 0; i < n - 1; i++) {
            for (j = 0; j < n - 1 - i; j++) {
                if (r[j] > r[j + 1]) {
                    int temp = r[j + 1];
                    r[j + 1] = r[j];
                    r[j] = temp;
                }
            }
        }
    }
    //选择排序
    void SelectSort(int r[], int n) {
        int i, j;
        for (i = 0; i < n; i++) {       //i从0开始
            int index = i;
            for (j = i + 1; j < n; j++) {   //不能等于n
                if (r[j] < r[index]) {
                    index = j;
                }
            }                 
            if (index != i) {
                int temp = r[i];
                r[i] = r[index];
                r[index] = temp;
            }
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 mifare plus卡认证
  • ¥30 LSTM预测结果是一条直线
  • ¥15 stnodeeditor自定义控件
  • ¥15 SDO如何更改STM32的波特率
  • ¥15 uniapp的uni-datetime-picker组件在ios端不适配
  • ¥15 前端 uniapp App端在离线状态如何使用modbus 连接手机蓝牙进行读写操控机器?
  • ¥15 SQL语句根据字段自动生成行
  • ¥500 “掌声响起来”软件(不确定性人工智能)
  • ¥500 我要找大模型一体机产品手册和应用案例
  • ¥15 ubuntu实验生成可执行文件main失败