c++中对数组元素进行冒泡排序时,程序并没有排序,求助

struct Words{
string name;//记录输入的单词
int val;//该单词的输入次数
};
vector <Words> wds;//元素类型为Words,size可扩张的动态数组wds[]
int& value(const string& str);//将输入单词存入数组wds中,并记录该单词输入次数
void Prin(vector<Words> w);//输出单词
int main()
{
string s,t;
int i,j;
cout<<"input words and use \"quit\" as a terminating word"<<endl;
cin>>s;
if(s=="Quit"||s=="quit")
{
cout<<"end the input"<<endl;
return 0;
}
while(s!="Quit"&&s!="quit")
{
value(s)++;
cin>>s;
}
Prin(wds);
cout<<"input after the Qsort"<<endl;
for(j=0;i<wds.size()-1;j++)
for(i=0;i<wds.size()-1-j;i++)
if(wds[i].name<wds[i+1].name)
{
t=wds[i].name;
wds[i].name=wds[i+1].name;
wds[i+1].name=t;
}//冒泡排序
Prin(wds);
return 0;
}
int& value(const string& str)
{
Words p;
int i;
for(i=0;i<wds.size();i++)
if(str==wds[i].name)
return wds[i].val;//对于已经输入过的words,此次输入不再将其存入数组中,只是将该words的出现次数+1
p.name=str;
p.val=0;
wds.push_back(p);//对于第一次输入的words,将其存入数组中,并将其输入次数设置为1
return wds[wds.size()-1].val;
}
void Prin(vector<Words> w)
{
int i;
for(i=0;i<w.size();i++)
cout<<w[i].name<<" ";
cout<<endl;
}
这是我的程序,就是输入几个单词,排序后输出这些单词,可是里面冒泡排序并没有对字符串排序,输出地字符串还是我输入时的顺序。。

排序算法的第一个for循环的中止条件应该是 j 小于size ,你写的是i小于size

此类拼写错误希望以后能自行解决
另外,这个问题的关键,你也认识到,是排序算法的错误,因此最好把问题的范围缩小。具体的说,你贴了这么多代码,只有那两个for循环是需要的,其他大段大段的用户数据读入都是和解决问题无关的。这是对于我这样的问题回答者来讲;对于你自己而言,每次改了代码,都要手动输入一遍,也是很浪费时间的。
温馨提示:内容为网友见解,仅供参考
无其他回答

求解我的这个C程序怎么不能给输出排序啊?
为什么不能排序呢?是因为你的冒泡排序弄错了。先说问题:1:你每个函数里面都有一个参数int len,实际上在子函数里面都没有用到,而用到的是全局变量M,所以len这个变量可以去掉。2:你为了让程序暂停一下,你使用了一个很大的空循环。你可以用sleep(2000)函数来代替,2000代表2000ms,可以更改这个...

C++中先输入30人的成绩再用冒泡排序法将成绩排序
1.a[]是一个无序的序列。如果a[]是已经降序排序好的,我们也设为无序,即 它作为一个序列参数,人可以看出他是有序的,但程序把它作为参数,要 经过冒泡排序,程序才能认为得到的结果序列是一个有序的序列。2.选出序列中第一大元素作为a[0]:3.原序列分为两个子序列:a[0]子序列有序,a[...

C++: 用bubblesort写个排顺序的程序。
看你这意思吧,print函数是用来打印这个数组的。sortlist函数是用来输入这个数组数值的bubblesort函数是用来冒泡排序的。所以我就按照你的要求给你写了个 #include <iostream> using namespace std;void print(int data[],int n){ cout<<"\\nPrint: ";for (int i=0; i<n; i++){ cout<<data...

C++ 冒泡排序法
BubbleSort(s,10);cout<<"排序结果:";print(s,10);system("pause");}

C++ vector进行冒泡排序
for(vector<int>::size_type iy=0; iy<ivec.size()-ix; ++iy)中,ivec.size()-ix还要再-1;另外说句题外话,swap函数可以声明成inline,不然函数重复调用开销挺大的

求用c++写一个main函数冒泡排序 输入一个数组 分步骤写出每一步的结果...
int main() { int i,j,t,a[10]={20,34,54,33,56,78,91,11,76,49};printf("原来的数组:\\n");for(i=0;i<10;i++)printf("%d ",a[i]);printf("\\n");for(i=0;i<9;i++)for(j=0;j<9-i;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;} pr...

C++中如何实现数组的随机排序呢
你是指把一个数列随机打乱顺序么?一楼明显是冒泡排序啊……楼主倒是说话啊,你不说清楚大家怎么帮你呢……这样吧,我在CSDN找了一个标准c++实现的乱序小程序,你先看看吧。 include<iostream> include<algorithm> using namespace std;int main(){ int a[10] = {1,2,3,4,...

C++程序排序后出现乱码
\/\/冒泡排序 void sort(int a[],int n)\/\/n为数组a的元素个数 { int i,j,temp;for(j=0;j<n-1;j++)for(i=0;i<n-1-j;i++){ if(a[i]>a[i+1])\/\/数组元素大小按升序排列 { temp=a[i];a[i]=a[i+1];a[i+1]=temp;} } } \/\/最短寻道时间优先(SSTF)void SSTF(...

C++的carray数组排序问题。
只是交换了a1和a2的值,却没有交换m_array中的元素位置。换句话说,m_array中有了另外的一份a1和a2,已经不是你外面的a1和a2了!所以,你要想交换m_array中的元素顺序,就必须操作m_array,你可以用以下两种方式:(1)m_array中存储对象的指针,然后你在外部交换指针指向的值(正如网友wwmfeng所...

求举一例子算时间复杂度的c++全程序
下面是最简单的排序算法(冒泡排序),其时间复杂度为O(n^2)int *bubble_sort (int a[], int n){ int i = 0;int j = 0;int temp;int *p;for (i=0; i<n; i++) \/\/每执行一次下面的for循环执行一次,所以时间复杂度=n*O(n)=O(n^2)for(j=i+1; j<n; j++) \/\/没循环...

相似回答