Estructura de datos ------ algoritmo de clasificación

Ordenación rápida
Ordenación en montón
Ordenación de burbuja
Burbuja bidireccional Ordenación
por inserción directa
Ordenación de selección simple

#include <bits/stdc++.h>
#define random(x) (rand()%x)
using namespace std;
int length=10;
int data[10];
int num=1;
/*随机生成数据*/
void Initdata(){
    
    
    for(int i=0;i<length;i++){
    
    
        data[i]=random(100);
    }
}
void display(int n);
/*快速排序划分区间的函数*/
int Parition(int A[],int left,int right){
    
    
     int temp=A[left];
     while(left<right){
    
    
        while(left<right&&temp<A[right]) right--;
            A[left]=A[right];
        while(left<right&&temp>=A[left]) left++;
            A[right]=A[left];
     }
     A[left]=temp;
     cout<<"第"<<num++<<"趟:";
     display(length);
     return left;
}
/*快速排序*/
void quickSort(int A[],int left,int right){
    
    
     if(left<right){
    
    
          int pos=Parition(A,left,right);
          quickSort(A,left,pos-1);
          quickSort(A,pos+1,right);
     }
}
/*下调操作*/
void DownAdjust(int low,int high){
    
    
    int i=low,j=2*i;
    while(j<=high){
    
    
        if(j+1<=high&&data[j+1]>data[j]){
    
    
             j=j+1;
        }
        if(data[i]<data[j]){
    
    
            swap(data[i],data[j]);
            i=j;
            j=2*i;
        }
        else{
    
    
            break;
        }
    }
}
/*上调一个元素*/
void UpAdjust(int low,int high){
    
    
     int i=high, j=2/2;
     while(i>=low){
    
    
          if(data[j]<data[i]){
    
    
                swap(data[i],data[j]);
                i=j;
                j=i/2;
          }
          else{
    
    
            break;
          }

     }
}
/*初始化一个堆*/
void Create(int n){
    
    
    for(int i=n/2;i>=0;i--){
    
    
          DownAdjust(i,n-1);
    }
}
/*堆排序*/
void HeapSort(int n){
    
    
    cout<<"堆排序:"<<endl;
    Create(n);
    for(int i=n-1;i>=0;i--){
    
    
          swap(data[0],data[i]);
          cout<<"第"<<n-i<<"趟 :";
          display(length);
          DownAdjust(0,i-1);
    }
}
/*显示数据*/
void display(int n){
    
    
    for(int i=0;i<n;i++){
    
    
        cout<<data[i]<<' ';
    }
    cout<<endl;

}
/*冒泡排序*/
void BubbleSort(int arr[],int n){
    
    
    int num=1;
    for(int i=0;i<n;i++){
    
    
        for(int j=i;j<n;j++){
    
    
            if(arr[i]>arr[j]){
    
    
                swap(arr[i],arr[j]);
            }
         cout<<"第"<<num++<<"趟:";
         display(length);
        }
    }
}
/*双向冒泡*/
void DoubleBubbleSort(int arr[],int n){
    
    
    int num=1;
    int low=0,high=n-1;
    int flag=true;
    while(low<high&&flag){
    
    
          flag=false;
          for(int i=low;i<=high-1;i++){
    
    
            if(arr[i]>arr[i+1]){
    
    
                 swap(arr[i],arr[i+1]);
                 flag=true;
            }
          }
          high--;
          for(int i=high;i>low;i--){
    
    
            if(arr[i]<arr[i-1]){
    
    
                swap(arr[i],arr[i-1]);
            }
            flag=true;
          }
          low++;
        cout<<"第"<<num++<<"趟:";
        display(length);
    }
}
void Insert(int arr[],int n){
    
    
     for(int i=1;i<n;i++){
    
    
        if(arr[i-1]>arr[i]){
    
    
            for(int j=i;j>0;j--){
    
    
               if(arr[j]<arr[j-1])
                 swap(arr[j],arr[j-1]);
               else {
    
    
                  break;
               }
            }
        }
        cout<<"第"<<i<<"趟:";
        display(length);
     }
}
/*简单选择排序*/
void SimpleSort(int arr[],int n){
    
    
      for(int i=0;i<n-1;i++){
    
    
         int index=i;
         for(int j=i+1;j<n;j++){
    
    
            if(arr[j]<arr[index]){
    
    
                index=j;
            }
         }
         if(index!=i)swap(arr[i],arr[index]);
        cout<<"第"<<i+1<<"趟:";
        display(length);
      }
}
int main()
{
    
    
    int n;
    Initdata();/*随机数生成初始化数据*/
    cout<<"请输入哪种排序方式:"<<endl;
    cout<<"1 快速排序: "<<endl;
    cout<<"2 堆排序"<<endl;
    cout<<"3 冒泡排序"<<endl;
    cout<<"4 双向冒泡 "<<endl;
    cout<<"5 直接插入插入排序 "<<endl;
    cout<<"6 简单选择排序"<<endl;
    cin>>n;
    cout<<"初始化数据为: ";
    display(length);
    switch(n){
    
    
         case 1:quickSort(data,0,length); break;
         case 2:HeapSort(length);break;
         case 3:BubbleSort(data,length);break;
         case 4:DoubleBubbleSort(data,length);break;
         case 5:Insert(data,length);break;
         case 6:SimpleSort(data,length);break;
    }
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/qq_44741914/article/details/110384329
Recomendado
Clasificación