
c语言编程题,高手请帮忙,急 30
题目:编写程序,输入若干字符串,将其按从小到大的顺寻排列输出。请真正的高手帮忙,不要说“用strcmp()就行这”种废话的谢谢那位提供了很多种字符串排序函数的朋友,虽然我...
题目:编写程序,输入若干字符串,将其按从小到大的顺寻排列输出。
请真正的高手帮忙,不要说“用strcmp()就行这”种废话的
谢谢那位提供了很多种字符串排序函数的朋友,虽然我并不是排序时遇到困难,但还是谢谢
题目的要求是能输入若干个字符串,并对其排序后从小到大输出,这个若干是题目重点,要能输入不确定个数的字符串,例如,第一次运行时是输入了3个字符串来比较,而第二次运行时用来比较5个字符串。
最好能对代码做下解释,谢谢 展开
请真正的高手帮忙,不要说“用strcmp()就行这”种废话的
谢谢那位提供了很多种字符串排序函数的朋友,虽然我并不是排序时遇到困难,但还是谢谢
题目的要求是能输入若干个字符串,并对其排序后从小到大输出,这个若干是题目重点,要能输入不确定个数的字符串,例如,第一次运行时是输入了3个字符串来比较,而第二次运行时用来比较5个字符串。
最好能对代码做下解释,谢谢 展开
2个回答
展开全部
直接用strcmp()就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
排序算法很多的,下面有几个C++写的字符串排序函数。
C里面不能直接用 > 、< 那些的比较字符串,将大于(小于)符号换成strcmp()函数就行了。
其实跟C差不多,因为没有用类那些的复杂结构,稍微改改就是C了。
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
/*-----------------Insertion Sort----------------------------*/
int InsertionSort(string a_sort[], int length)
{
int i,j;
string key;
ofstream fout;
for(j=1; j<length; j++)
{
key = a_sort[j];
i=j-1;
while( (i>=0)&&(a_sort[i]>key) )
{
a_sort[i+1]=a_sort[i];
i=i-1;
}
a_sort[i+1]=key;
}
return 1;
}
/*--------------------Quick Sort------------------------------------*/
int Partition(string a[], int p, int r)
{
int i, j;
string x, temp;
x = a[r];
i = p-1;
for(j=p; j<r; j++)
{
if(a[j]<=x)
{
i = i+1;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
temp = a[i+1];
a[i+1] = a[r];
a[r] = temp;
return i+1;
}
int Randomized_Partition(string a[], int p, int r)
{
int i;
string temp;
i = rand() % (p-r) + p;
temp = a[r];
a[r] = a[i];
a[i] = temp;
return Partition(a, p, r);
}
int QuickSort(string a[], int p, int r)
{
int q;
while(p<r)
{
q = Randomized_Partition(a, p, r);
QuickSort(a, p, q-1);
p = q+1;
}
return 1;
}
/*---------------------BubbleSort-------------------------------------*/
int BubbleSort(string a_sort[], int length)
{
int i, j;
string temp;
for(i=0; i<length; i++)
{
for(j=length-1; j>i; j--)
{
if( a_sort[j] < a_sort[j-1] )
{
temp = a_sort[j];
a_sort[j] = a_sort[j-1];
a_sort[j-1] = temp;
}
}
}
return 1;
}
/*----------------------HeapSort--------------------------------------*/
int MaxHeapify(string a[], int i, int HeapSize) //调整为最大堆
{
int l, r, largest;
string temp;
l = 2*i+1;
r = 2*i+2;
if( l<HeapSize && a[l]>a[i] )
largest = l;
else largest = i;
if( r<HeapSize && a[r]>a[largest] )
largest = r;
if ( largest!=i )
{
temp = a[i];
a[i] = a[largest];
a[largest] = temp;
MaxHeapify(a, largest, HeapSize);
}
return 1;
}
int Build_Max_Heap(string a[], int length ) //建最大堆
{
int i;
int HeapSize;
HeapSize = length;
for( i= length/2-1; i>=0; i-- )
MaxHeapify( a, i, length);
return 1;
}
int HeapSort(string a_sort[], int length) //堆排序
{
int i;
int HeapSize;
HeapSize = length;
string temp;
Build_Max_Heap(a_sort, length);
for(i=length-1; i>1; i--)
{
temp = a_sort[0];
a_sort[0] = a_sort[i];
a_sort[i] = temp;
HeapSize -= 1;
MaxHeapify(a_sort,0,HeapSize);
}
return 1;
}
/*--------------------Merge Sort------------------------------------*/
int Merge (string a[], int p, int q, int r)
{
int n1, n2;
int i, j, k;
static string L[n], R[n];////
n1 = q-p+1;
n2 = r-q;
for(i=0; i<n1; i++)
L[i] = a[p+i-1];
for(j=0; j<n2; j++)
R[j] = a[q+j];
L[n1+1] = R[n2+1] = "................";
i=1;
j=1;
for (k=p; k<q; k++)
{
if ( L[i] <= R[j])
{
a[k]=L[i];
i += 1;
}
else
{
a[k]=R[j];
j += 1;
}
}
return 1;
}
int MergeSort(string a[], int p, int r)
{
int q=0;
if(p<r)
{
q=(p+r)/2;
MergeSort(a, p, q);
MergeSort(a, q+1, r);
Merge(a, p, q, r);
}
return 1;
}
C里面不能直接用 > 、< 那些的比较字符串,将大于(小于)符号换成strcmp()函数就行了。
其实跟C差不多,因为没有用类那些的复杂结构,稍微改改就是C了。
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
/*-----------------Insertion Sort----------------------------*/
int InsertionSort(string a_sort[], int length)
{
int i,j;
string key;
ofstream fout;
for(j=1; j<length; j++)
{
key = a_sort[j];
i=j-1;
while( (i>=0)&&(a_sort[i]>key) )
{
a_sort[i+1]=a_sort[i];
i=i-1;
}
a_sort[i+1]=key;
}
return 1;
}
/*--------------------Quick Sort------------------------------------*/
int Partition(string a[], int p, int r)
{
int i, j;
string x, temp;
x = a[r];
i = p-1;
for(j=p; j<r; j++)
{
if(a[j]<=x)
{
i = i+1;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
temp = a[i+1];
a[i+1] = a[r];
a[r] = temp;
return i+1;
}
int Randomized_Partition(string a[], int p, int r)
{
int i;
string temp;
i = rand() % (p-r) + p;
temp = a[r];
a[r] = a[i];
a[i] = temp;
return Partition(a, p, r);
}
int QuickSort(string a[], int p, int r)
{
int q;
while(p<r)
{
q = Randomized_Partition(a, p, r);
QuickSort(a, p, q-1);
p = q+1;
}
return 1;
}
/*---------------------BubbleSort-------------------------------------*/
int BubbleSort(string a_sort[], int length)
{
int i, j;
string temp;
for(i=0; i<length; i++)
{
for(j=length-1; j>i; j--)
{
if( a_sort[j] < a_sort[j-1] )
{
temp = a_sort[j];
a_sort[j] = a_sort[j-1];
a_sort[j-1] = temp;
}
}
}
return 1;
}
/*----------------------HeapSort--------------------------------------*/
int MaxHeapify(string a[], int i, int HeapSize) //调整为最大堆
{
int l, r, largest;
string temp;
l = 2*i+1;
r = 2*i+2;
if( l<HeapSize && a[l]>a[i] )
largest = l;
else largest = i;
if( r<HeapSize && a[r]>a[largest] )
largest = r;
if ( largest!=i )
{
temp = a[i];
a[i] = a[largest];
a[largest] = temp;
MaxHeapify(a, largest, HeapSize);
}
return 1;
}
int Build_Max_Heap(string a[], int length ) //建最大堆
{
int i;
int HeapSize;
HeapSize = length;
for( i= length/2-1; i>=0; i-- )
MaxHeapify( a, i, length);
return 1;
}
int HeapSort(string a_sort[], int length) //堆排序
{
int i;
int HeapSize;
HeapSize = length;
string temp;
Build_Max_Heap(a_sort, length);
for(i=length-1; i>1; i--)
{
temp = a_sort[0];
a_sort[0] = a_sort[i];
a_sort[i] = temp;
HeapSize -= 1;
MaxHeapify(a_sort,0,HeapSize);
}
return 1;
}
/*--------------------Merge Sort------------------------------------*/
int Merge (string a[], int p, int q, int r)
{
int n1, n2;
int i, j, k;
static string L[n], R[n];////
n1 = q-p+1;
n2 = r-q;
for(i=0; i<n1; i++)
L[i] = a[p+i-1];
for(j=0; j<n2; j++)
R[j] = a[q+j];
L[n1+1] = R[n2+1] = "................";
i=1;
j=1;
for (k=p; k<q; k++)
{
if ( L[i] <= R[j])
{
a[k]=L[i];
i += 1;
}
else
{
a[k]=R[j];
j += 1;
}
}
return 1;
}
int MergeSort(string a[], int p, int r)
{
int q=0;
if(p<r)
{
q=(p+r)/2;
MergeSort(a, p, q);
MergeSort(a, q+1, r);
Merge(a, p, q, r);
}
return 1;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询