排序 - 泡泡/选择

时间:2014-07-25 13:48:17

标签: c++ sorting

我使用Dev-C ++。每次使用我的排序函数时程序都会崩溃。没有一种工作方式:|

#include<iostream>
#include<string.h>
using namespace std;
void bsort(char * items,int length)
{
     bool ex = true;
     for(int a = 0;a < length;a++)
     {
             cout<<"Exchange";
         if(ex == false) break;
         ex = false;
         for(int b = 0;b >=  (length-1);b++)
         {

             if(items[b] < items[b+1])
             {
                  ex = true;
                  items[b] ^= items[b+1];
                  items[b+1] ^= items[b];
                  items[b] ^= items[b+1];    

             }                
         }        
     }        
     cout<<items;  
}
void sort(char * items,int count)
{
    register int a,b;
    register char t;

    for(a = 1;a < count;++a)
    {
          for(b = count-1; b >= a;--b)
          {
              if(items[b-1] > items[b])
              {
                   cout<<"Exchange";
                   t = items[b-1];
                   items[b-1] = items[b];
                   items[b] = t;              
              }      
          }      
    }    
}
void xselect(char * items,int count)
{
          char c = items[0];
          for(int a = 1;a < count;a++)
          {
              if(c > items[a])        
              {
                   c ^= items[a];
                   items[a] ^= c;
                   c ^= items[a];    
              }
          }
          cout<<items;
}
int main ()
{
    char * p = "I am awesome";
    xselect(p,strlen(p));
    cout<<p;
    return cin.get();
}

出了什么问题?

编辑:算法可能是错误的,但导致程序崩溃的原因是什么?我得到“app.exe已经停止工作......”

2 个答案:

答案 0 :(得分:4)

在你的功能中:

    char * p = "I am awesome";

其中“我很棒”是一个const char *。在排序过程中,你试图改变它,这是我所知道的未定义的行为。

首先分配一个char *并用所需的字符串填充它。

或者更好,因为你正在使用C ++,尝试使用std :: string来处理大部分字符串处理。

Ps:将来请尝试确定代码的哪个部分相关,并发布该代码段而不是链接。此外,有关何时崩溃(例如行号)的更详细信息可以帮助您自己和其他人找到问题。

答案 1 :(得分:1)

void bsort:你做了什么=&gt; for(int b = 0; b&gt; =(length-1); b ++)

你需要做什么=&gt; for(int b = 0; b&lt; length; b ++)

无效排序:它在我的电脑上工作正常。

void xselect:void xselect(string items,int count){ for(int i=0;i<count-1;i++) { char c = items[i]; for(int a = i+1;a < count;a++) { if(c > items[a])
{ cout<<c<<items[a]<<endl; c ^= items[a]; items[a] ^= c; c ^= items[a]; items[i]=c; cout<<c<<items[a]<<endl; } } } cout<<items; }