1.简单选择排序
#include<iostream>
using namespace std;
class List{
public:
List(){
array=NULL;
}
void creat(){
int n;
cout<<"请输入数组大小:";
cin>>n;
this->n=n;
array=new int[n];
for(int i=0;i<n;i++){
cin>>array[i];
}
}
void print(){
for(int i=0;i<n;i++){
cout<<array[i]<<" ";
}
cout<<endl;
}
void sort(){
for(int i=0;i<n-1;i++){
int min=i;
for(int j=i+1;j<n;j++){
if(array[min]>array[j]){
min=j;
}
}
int t=array[i];
array[i]=array[min];
array[min]=t;
}
}
private:
int *array;
int n;
};
int main(){
List l;
l.creat();
l.sort();
l.print();
}
2.堆排序
#include<iostream>
using namespace std;
class List{
public:
List(){
array=NULL;
}
void creat(){
int n;
cout<<"请输入数组大小:";
cin>>n;
this->n=n;
array=new int[n];
for(int i=0;i<n;i++){
cin>>array[i];
}
}
void print(){
for(int i=0;i<n;i++){
cout<<array[i]<<" ";
}
cout<<endl;
}
void sort(){
buildHeap();
for(int i=n-1;i>0;i--){
swap(0,i);
down(0,i);
}
}
private:
void swap(int x,int y){
int t=array[x];
array[x]=array[y];
array[y]=t;
}
void down(int i,int n){
int parent=i;
int child=2*i+1;
while(child<n){
if(array[child]<array[child+1]&&child+1<n){
child++;
}
if(array[child]>array[parent]){
swap(child,parent);
parent=child;
}
child=2*child+1;
}
}
void buildHeap(){
for(int i=n/2-1;i>=0;i--){
down(i,n);
}
}
int *array;
int n;
};
int main(){
List l;
l.creat();
l.sort();
l.print();
}