上机实验6

一、排序方法

//冒泡法——从小到大排列
void BubbleSort(double a[],int n)
{
    int i = 0;
    int j = 0;
    for (j = 0;j<n;j++)
    {
        for(i = n-1;i>j;i--)
        {
            if(a[j]>a[i])
                Swap(a[j],a[i]);        
        }
    }

}
 

//选择排序——从小到大
void ChoseSort(double a[],int n)
{
    int i = 0;
    int j = 0;
    for(j = 0;j<n;j++)
    {
        for(i = j+1; i<n;i++)
        {
            if(a[j]>a[i])
                Swap(a[j],a[i]);
        }
    }
}
 

// 快速排序QuickSort2
void QuickSort2(double a[],int low,int high)
{
    if (low>=high)
        return ;
    int i = low - 1;
    int j = low; 
    double key = a[high];
    for(;j<=high;j++)
    {
        if(a[j]>=key)
        {
            i++;
            if(i!=j)
                Swap(a[i],a[j]);
        }
    
    }

    QuickSort2(a, low, i-1);
    QuickSort2(a, i+1, high);

}
 

二、实验结果

三、实现排序的主要程序

四、实验全部程序

#include "shiyan6.h"

using namespace std;

class MyArray {

public:

MyArray(int length);

~MyArray();

void Input();

void Display(string);

protected:

int* alist;

int length;

};

class SortArray :public MyArray {

public:

SortArray(int length)

:MyArray(length)

{

cout << "SortArray类对象已创建!" << endl;

}

~SortArray()

{

cout << "SortArray类对象已撤销!" << endl;

}

void Sort();

};

MyArray::MyArray(int leng)

{

if (leng <= 0)

{

cout << "error length";

exit(1);

}

length = leng;

alist = new int[length];

if (alist == NULL)

{

cout << "assign failure";

exit(1);

}

cout << "MyArray类对象已创建!" << endl;

}

MyArray::~MyArray()

{

delete[] alist;

cout << "MyArray类对象已撤销!" << endl;

}

void MyArray::Display(string str)

{

int i;

int* p = alist;

cout << str << length << "个整数:";

for (i = 0; i < length; i++, p++)

{

cout << *p << " ";

}

cout << endl;

}

void MyArray::Input()

{

cout << "请从键盘输入" << length << "个整数:";

int i;

int* p = alist;

for (i = 0; i < length; i++, p++)

{

cin>>*p;

}

}

void SortArray::Sort()

{

int i;

int j;

int temp = 0;

int *p = alist;

int *q = alist;

cout << "显示排序以前的" << length << "个整数:";

for (i = 0; i < length; i++, p++)

{

cout << *p << " ";

}

cout <<endl<< "显示排序以后的" << length << "个整数:";

for (i = 0; i < length; i++)

{

for (j = i; j < length; j++)

{

if (*(q + j) < *(q + i))

{

temp = *(q + i);

*(q + i) = *(q + j);

*(q + j) = temp;

}

}

cout << *(q + i)<<" ";

}

cout << endl;

}

int main()

{

SortArray a(5);

//MyArray a(5);

a.Input();

//a.Display("显示已经输入的");

a.Sort();

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值