数据结构:排序算法复习 日常打卡
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cstdio>
#include<string>
#include<vector>
#include<cstring>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<set>
using namespace std;
const int N=1000000+10;
const int Len=5;
int arr[6]={
0,5,2,8,1,6};
void p(){
for(int i=1;i<=Len;i++){
cout<<arr[i]<<" ";
}
cout<<endl;
}
//选择排序
//①冒泡排序
void my_buble_sort(){
int flag;
for(int i=1;i<Len;i++){
flag=1;
for(int j=1;j<=Len-i;j++){
if(arr[j]>arr[j+1]){
flag=0;
swap(arr[j],arr[j+1]);
}
}
if(flag) break;
}
p();
}
//②快速排序
int pvt(int l, int r){
arr[0]=arr[l];
while(l<r){
while(l<r && arr[r]>=arr[0]) r-- ;
arr[l]=arr[r];
while(l<r && arr[l]<=arr[0]) l++ ;
arr[r]=arr[l];
}
arr[r]=arr[0];
return r;
}
void my_fast_sort(int l, int r){
if(l<r){
int pivot=pvt(l,r);
my_fast_sort(l,pivot-1);
my_fast_sort(pivot+1,r);
}
}
//选择排序
//①简单选择排序
void select_sort(){
for(int i=1;i<Len;i++){
int index=i;
arr[0]=arr[i];
for(int j=i+1;j<=Len;j++){
if(arr[j]<arr[0]){
index=j;
arr[0]=arr[j];
}
}
swap(arr[index],arr[i]);
}
p();
}
//②堆排序
void adjust_heap(int index, int Len){
arr[0]=arr[index];
int i;
for(i=index*2;i<=Len;i*=2){
if(i<Len && arr[i+1]>arr[i]){
i++;
}
if(arr[0]>=arr[i]){
break;
}else{
arr[index]=arr[i];
index=i;
}
}
arr[index]=arr[0];
}
void my_build_heap(){
for(int i=Len/2;i;i--){
adjust_heap(i,Len);
}
}
void my_heap_sort(){
my_build_heap();
for(int i=Len;i;i--){
swap(arr[1],arr[i]);
adjust_heap(1,i-1);
}
p();
}
//插入排序
//①直接插入排序
void insert_sort(){
for(int i=2;i<=Len;i++){
arr[0]=arr[i];
if(arr[0]<arr[i-1]){
int j;
for(j=i-1;j;j--){
if(arr[0]<arr[j]){
arr[j+1]=arr[j];
}else{
break;
}
}
arr[j+1]=arr[0];
}
}
p();
}
//②希尔排序
void shell_sort(){
for(int dk=Len/2;dk;dk/=2){
for(int i=dk+1;i<=Len;i++){
arr[0]=arr[i];
if(arr[0]<arr[i-dk]){
int j;
for( j=i-dk;j;j-=dk){
if(arr[0]<arr[j]){
arr[j+dk]=arr[j];
}else{
break;
}
}
arr[j+dk]=arr[0];
}
}
}
p();
}
int main(){
return 0;
}