快速排序
堆排序
冒泡排序
双向冒泡
直接插入插入排序
简单选择排序
#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;
}