【算法】双向冒泡排序

【算法】双向冒泡排序_第1张图片

//
// Created by Lunau on 2023/10/11.
//
#include
#include 

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]);
    }
}

题目来自王道数据结构

你可能感兴趣的:(数据结构,算法,排序算法)