题目描述
奇偶交换排序是一种交换排序。它的第一趟对序列中的所有奇数项 i i i扫描,第二趟对序列中的所有偶数项 i i i扫描,若 A [ i ] > A [ i + 1 ] A[i]>A[i+1] A[i]>A[i+1],则交换它们。第三趟对序列中的所有奇数项 i i i扫描,第四趟对序列中的所有偶数项 i i i扫描,……,如此反复,直至整个序列全部排好序为止。写出奇偶交换排序的算法。
实现代码
#include<bits/stdc++.h>
using namespace std;
void Sort(int arr[], int n){
int oddsort = 0;
int evensort = 0;
while(!oddsort || !evensort){ //奇偶交换排序
oddsort = 1;
evensort = 1;
for(int i=0; i<n-1; i+=2){ //奇排序
if(arr[i]>arr[i+1]){
swap(arr[i],arr[i+1]);
oddsort = 0;
}
}
for(int i=1; i<n-1; i+=2){ //偶排序
if(arr[i]>arr[i+1]){
swap(arr[i],arr[i+1]);
evensort = 0;
}
}
}
}
int main(){
int n;
cin>>n;
int arr[n];
for(int i=0; i<n; i++){
cin>>arr[i];
}
Sort(arr, n);
for(int i=0; i<n; i++){
cout<<arr[i]<<" ";
}
return 0;
}