64,654
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
#include<ctime>
using namespace std;
const int MAXSIZE = 100;
#define Swap(i,j) {int s = (i); (i) = (j); (j) = s;}
class Sort
{
int array[MAXSIZE];
//int length;
public:
Sort();
void Display();
void Bubble_Sort(int n);
};
////////////////////////////////////////////////
Sort::Sort()
{
srand(unsigned(time(NULL)));
for (int i=0;i<=MAXSIZE-1;i++)
array[i] = rand()%10000;
}
void Sort::Display()
{
for (int i=0;i<=MAXSIZE-1;i++)
{
cout<<array[i]<<" ";
if ((i+1)%10 == 0)cout<<endl;
}
}
void Sort::Bubble_Sort(int n)
{
cout<<"Bubble_Sort:"<<endl;
int change = 1;
int low = 0,high = n-1;
while ((low<high) && change)
{
change = 0;
for (int i=low;i<high;i++) //从上到下冒泡
if (array[i]>array[i+1]) {Swap(array[i],array[i+1]);change = 1;}
high--;
for (int j=high;j>low;j--) //从下向上冒泡
if (array[j]<array[j+1]) {Swap(array[j],array[j+1]);change = 1;}
low++;
}
}
int main(void)
{
Sort Sort_Object;
Sort_Object.Bubble_Sort(MAXSIZE-1);
Sort_Object.Display();
getchar();
return 0;
}
void Sort::Bubble_Sort(int n)
{
cout<<"Bubble_Sort:"<<endl;
int change = 1;
int low = 0,high = n-1;
while ((low<high) && change)
{
change = 0;
for (int i=low;i<high;i++) //从上到下冒泡
if (array[i]>array[i+1]) {Swap(array[i],array[i+1]);change = 1;}
high--;
for (int j=high;j>low;j--) //从下向上冒泡
if (array[j]>array[j+1]) //这里应该用>, 你用错了
{
Swap(array[j],array[j+1]);change = 1;
}
low++;
}
}
template<class T, int N>
Sort_Object.Merge_Sort(T (&arr)[N], int o, int n);
Sort_Object.Merge_Sort(int arr;int o,int n);// 这里的arr就像我上面定义的那样,
//是个类数据成员,该怎样设计呢?谢谢...
void Sort::Bubble_Sort(int n)
{
cout<<"Bubble_Sort:"<<endl;
int change = 1;
int low = 0,high = n-1;
while ((low<high) && change)
{
change = 0;
for (int i=low;i<high;i++) //从上到下冒泡(没考虑边界元素,改为i<=high)
if (array[i]>array[i+1]) {Swap(array[i],array[i+1]);change = 1;}
high--;
for (int j=high;j>low;j--) //从下向上冒泡(同上,改为j>=low)
//下面的array[j+1]改为array[j-1]就行了...
if (array[j]<array[j+1]) {Swap(array[j],array[j+1]);change = 1;}
low++;
}
}
#include <iostream.h>
void Bubble2Sort(int* pData,int Count)
{
int iTemp;
int left = 1;
int right =Count -1;
int t;
do
{
//正向的部分
for(int i=right;i>=left;i--)
{
if(pData[i]<pData[i-1])
{
iTemp = pData[i];
pData[i] = pData[i-1];
pData[i-1] = iTemp;
t = i;
}
}
left = t+1;
//反向的部分
for(i=left;i<right+1;i++)
{
if(pData[i]<pData[i-1])
{
iTemp = pData[i];
pData[i] = pData[i-1];
pData[i-1] = iTemp;
t = i;
}
}
right = t-1;
}while(left<=right);
}
void main()
{
int data[] = {10,9,8,7,6,5,4};
Bubble2Sort(data,7);
for (int i=0;i<7;i++)
cout<<data[i]<<" ";
cout<<"\n";
}