//
// Created by Lunau on 2023/10/11.
//
#include<stdio.h>
#include <cstdlib>
void swap(int &i,int &j) {
int tp = i;
i = j;
j = tp;
}
/**
* 双向冒泡排序,采用双指针
* @param arr
* @param len
*/
void Sort(int arr[], int len) {
int p=0, q = len-1, flag = 0;
for (int i=0; i<len-1; i++) {
if (flag%2 == 0) {//偶数时,本趟找最大的放右边
for (int j=p; j<len-1; j++) {//左找大的放右边
if (arr[j] > arr[j+1])
swap(arr[j],arr[j+1]);
}
q--; //右边有序记录的多了一位
} else {
for (int j=q; j>0; j--) {//从右找小的放左边
if(arr[j]<arr[j-1])
swap(arr[j],arr[j-1]);
}
p++; //左边有序记录多了一位
}
flag++;
}
}
int main(void) {
system("chcp 65001");
printf("输入待排序长度和元素\n");
int len;
scanf("%d", &len);
int arr[len];
for (int i=0; i<len; i++)
scanf("%d", &arr[i]);
Sort(arr,len);
printf("输出\n");
for (int i=0; i<len ;i++) {
printf("%d ",arr[i]);
}
}
题目来自王道数据结构