冒泡排序

基础算法

#include <stdio.h>
int main(void)
{
    int T = 0;
    printf("请输入排序总数量\n");
    scanf("%d",&a[i]);
    int a[T];
    int i= 0, j = 0, t= 0;
    for (; i < T; i++)
    {
        printf("请输入%d/%d位数字\n", i+1, sizeof(a) / sizeof(int));
        scanf("%d",&a[i]);
    }
    for (i = 0; i < T-1; i++)
    {
        for (j = 0; j < T - 1 - i; j++)
        {
            if (a[j] > a[j + 1])
            {
                t = a[j];
                a[j] = a[j + 1];
                a[j + 1] = t;
            }
        }
    }
    for (i = 0; i < T; i++)
    {
        printf("%d ", a[i]);
    }
}

改进

标记上一循环 位置给予POS标记 既然每次排序已经有了最大数 那么下次排序时 和已经确定的最大数字比较是无效计算 可从此进行优化
例 给定arr数组:

    int i = strlen(arr)-1;
    while(i > 0) {
    //i=最大
        int pos = 0;
        for(int j = 0 ; j < i;j++){
            if(arr[j] > arr[j+1]){
                pos = j;  //标记
                int tmp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
            }
        }
        i = pos;
    }
}

改进

正反同时进行冒泡排序 不断确定最大值和最小值 通过给定最大最小标记来减少无效运算

#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
    int T = 0;
    cin >> T;
    int arr[T];
    int i = 0;
    while (cin >> arr[i])
    {
        if (cin.get() == '\n') break;
        i++;
    }
    cout<<"Success:"<<endl;
    for(int j=0;j<T;j++)
    {
        cout<<arr[j]<<" ";
    }
    cout<<endl;
    int small_ = 0;
    int max_ = T-1;
    int sum_num = 0;
    while (small_ < max_) {
        for (int j = small_; j < max_; j++) {
            if (arr[j] > arr[j + 1]) {
                int tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
            sum_num++;
        }
        max_--;
        for (int k = max_; k > small_; k--) {
            if (arr[k] < arr[k - 1]) {
                int tmp = arr[k];
                arr[k] = arr[k - 1];
                arr[k - 1] = tmp;
            }
            sum_num++;
        }
        small_++;
    }
    cout<<"共排序次数:"<<sum_num<<endl<<"排序结果:";
    for(int v =0;v<T;v++)
    {
        cout<<arr[v]<<" ";
     } 
}
最后修改:2022 年 11 月 23 日
如果觉得我的文章对你有用,只需评论或转发支持,谢绝投喂!