数据结构实验——排序

Posted 你的微笑依然那样灿烂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构实验——排序相关的知识,希望对你有一定的参考价值。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <string.h>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <list>
#include <bitset>
#include <stack>
#include <stdlib.h>
using namespace std;
using namespace std;
/*
 输入一组关键字序列分别实现下列排序:
 1.实现简单选择排序、直接插入排序和冒泡排序。
 2.实现希尔排序算法。
 3.实现快速排序算法。
 4.实现堆排序算法。
 */
#define Maxsize 100

typedef int KeyType;
typedef int InfoType;
typedef struct

    KeyType key;
    InfoType info;
Type;
typedef struct

    Type r[Maxsize+1];
    int len;
Sqlist;
int data[Maxsize];
void Create(Sqlist &L,int n)

    L.len = n;
    for(int i=1;i<=n;i++)
    
        cin>>L.r[i].key;
        L.r[i].info = 0;
    

void Print(Sqlist L)

    cout<<"序列为:";
    for(int i=1;i<=L.len;i++)
        cout<<L.r[i].key<<' ';
    cout<<endl;

void Bubble_sort(Sqlist &L)

    Type p;
    for(int i=1;i<=L.len;i++)
        for(int j=i+1;j<=L.len;j++)
            if(L.r[i].key>L.r[j].key)
            
                p = L.r[i];
                L.r[i] = L.r[j];
                L.r[j] = p;
            

int Select_Min_Key(Sqlist L,int i)

    int k = i;
    Type minn = L.r[i];
    for(int j=i;j<=L.len;j++)
        if(L.r[j].key<minn.key)
        
            minn = L.r[j];
            k = j;
        
    return k;

void Select_Min_sort(Sqlist &L)

    Type p;
    for(int i=1;i<=L.len;i++)
    
        int j=Select_Min_Key(L,i);
        if(i!=j)
        
            p = L.r[i];
            L.r[i] = L.r[j];
            L.r[j] = p;
        
    

void Shell_pre(Sqlist &L,int d)

    int j;
    for(int i=d+1;i<=L.len;i++)
        if(L.r[i].key<L.r[i-d].key)
        
            L.r[0] = L.r[i];
            for(j=i-d;j>0 &&( L.r[0].key<L.r[j].key);j-=d)
                L.r[j+d] = L.r[j];
            L.r[j+d] = L.r[0];
        

int Reverse(int data[],Sqlist L)

    int i = 0;
    int k = L.len/2;
    while(k)
    
        data[i++] = k;
        k = k>>1;
    
    return i;

void Shell_sort(Sqlist &L,int data[],int t)

    for(int i=0;i<t;i++)
        Shell_pre(L,data[i]);

int QS_slove(Sqlist &L,int low,int high)

    int p;
    L.r[0] = L.r[low];
    p = L.r[low].key;
    while(low<high)
    
        while(low<high && L.r[high].key>=p)
            high--;
        L.r[low] = L.r[high];
        while(low<high && L.r[high].key<=p)
            low++;
        L.r[high] = L.r[low];
    
    L.r[low] = L.r[0];
    return low;

void Q_sort(Sqlist &L,int low,int high)

    int p = 0;
    if(low<high)
    
        p = QS_slove(L,low,high);
        Q_sort(L,low,p-1);
        Q_sort(L,p+1,high);
    

void Quick_sort(Sqlist &L)

    Q_sort(L,1,L.len);

typedef Sqlist HeapType;
void Heap_adjust(HeapType &H,int s,int m)

    Type rc = H.r[s];
    for(int j = 2*s;j<=m;j*=2)
    
        if(j<m && (H.r[j].key<H.r[j+1].key))
            j++;
        if(rc.key>=H.r[j].key)
            break;
        H.r[s] = H.r[j];
        s = j;
    
    H.r[s] = rc;

void Heap_sort(Sqlist &H)

    Type p;
    for(int i=H.len/2;i>0;i--)
        Heap_adjust(H, i, H.len);
    for(int i=H.len;i>1;i--)
    
        p = H.r[1];
        H.r[1] = H.r[i];
        H.r[i]  =p;
        Heap_adjust(H, 1, i-1);
    

int main()

    Sqlist L;
    int t;
    int n;
    cout<<"请输入要排序的个数n:";
    cin>>n;
    cout<<"请输入n个数,回车结束";
    Create(L,n);
    Print(L);
    cout<<"创建完毕";
    
    
    
    cout<<"1--退出"<<endl;
    cout<<"2--冒泡排序"<<endl;
    cout<<"3--简单选择排序"<<endl;
    cout<<"4--希尔排序"<<endl;
    cout<<"5--快速排序"<<endl;
    cout<<"6--堆排序"<<endl;
    cout<<"请输入要排序的类型:";
    while(cin>>n && n!=1)
    
        if(n==2)
        
            Bubble_sort(L);
            Print(L);
            cout<<"冒泡排序完毕。"<<endl;
        
        if(n==3)
        
            Select_Min_sort(L);
            Print(L);
            cout<<"简单选择排序完毕。"<<endl;
        
        if(n==4)
        
            t = Reverse(data,L);
            Shell_sort(L,data,t);
            Print(L);
            cout<<"希尔排序完毕。"<<endl;
        
        if(n==5)
        
            Quick_sort(L);
            Print(L);
            cout<<"快速排序完毕。"<<endl;
        
        if(n==6)
        
            Heap_sort(L);
            Print(L);
            cout<<"堆排序完毕。"<<endl;
        
        else goto A;
    A:;
    
    
    return 0;  
  



以上是关于数据结构实验——排序的主要内容,如果未能解决你的问题,请参考以下文章

SDUT 3403 数据结构实验之排序六:希尔排序

数据结构实验之排序八:快速排序

数据结构-实验六 排序

SDUT 3403 数据结构实验之排序六:希尔排序

SDUT 3399 数据结构实验之排序二:交换排序

SDUT-3399_数据结构实验之排序二:交换排序