目录
前言:
在学习算法时,受到选择排序和翻转函数的启发,自己创造了一个名为SortOverturn的排序算法。执行效率中下等。
思想:
模仿选择排序,但不是用swap函数交换元素,而是将区间内的数翻转一遍,前提是区间的第一个数在升序的情况下要大于最后一个数,在降序的情况下第一个元素要小于最后一个元素,这样便可以实现一个排序。
(SortOverturn中的overturn是翻转的意思)
代码:
这是升序代码。
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<windows.h>
using namespace std;
long long a[100005];
void gotoxy(int x,int y){
COORD pos={x,y};
HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut,pos);
return;
}//覆盖清屏函数,简单理解为清屏
void my_reverse(int start,int over){//数组翻转函数
int b[100005],cnt=0;//待翻转区间
for(int i=start;i<=over;i++){
b[cnt++]=a[i];
}
int temp=0;
int n=cnt;
for(int i=0;i<n;i++){
temp=b[n-i-1];
b[n-i-1]=b[i];
b[i]=temp;
}//翻转
cnt=0;
for(int i=start;i<=over;i++){
a[i]=b[cnt];
cnt++;
}//复制
}
int main(){
int n;//个数
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}//输入待排序数字
for(int i=1;i<n;i++){
for(int j=i+1;j<=n;j++){
if(a[i]<=a[j]){
continue;
}//此处为升序
if(a[i]>a[j]){
my_reverse(i,j);
}//翻转
}
}
gotoxy(0,0);//清屏
for(int i=1;i<=n;i++){
cout<<a[i]<<' ';
}//输出排序后的数组
return 0;
}