蓝桥杯算法基础(11):十大排序算法(冒泡排序)c语言般版

时间:2024-03-19 21:16:34

十大排序算法合集(c语言般)

冒泡排序

选择排序

插入排序

希尔排序

快速排序

归并排序

堆排序

计数排序

桶排序

基数排序

分类:
交换类
1.冒泡排序 2.快速排序
分配类
1.计数排序 2.基数排序
选择类
1.选择排序
归并类
1.归并排序
插入类
1.插入排序 2.希尔排序

冒泡排序

#include<stdio.h>
//它是一个基于交换的排序,每一轮搜索最大值放到序列的尾部
#define MAXSIZE 10

void intArr(int arr[],int length){
    for(int i=0;i<length;i++){
    arr[i]=rand()%20;
    }
}

void showArr(int arr[],int length){
    for(int i=0;i<length;i++){
    printf("%d",arr[i]);
    }
    printf("\n----------------------\n");

}*/
/*(原始的冒泡排序)
void bubSort(int arr[],int length){
   int flag=1;
   //定义一个标记,若是还没有进行length次循环就已经排列好了,则可通过flag判断是否退出循环
   while(length-- && flag==1){//若是没有触发交换条件,则意味着已经排好序了,则退出循环
   flag=0;
        for(int i=0;i<length;i++){

            if(arr[i+1]<arr[i]){
          flag=1;
            int temp=arr[i];
            arr[i]=arr[i+1];
            arr[i+1]=temp;
            //两个两个比较,若前面的值大于后面的值,则两者交换,进行length轮,每一轮都选出最大值放到后面已排序部分
            }
        }
   }
    }
  */
   /*
(相比于原始的冒泡排序,增加了flag标记,避免了后续的无用操作)
void bubSort(int arr[],int length){
   int flag=1;
   //定义一个标记,若是还没有进行length次循环就已经排列好了,则可通过flag判断是否退出循环
   while(length-- && flag==1){//若是没有触发交换条件,则意味着已经排好序了,则退出循环
   flag=0;
        for(int i=0;i<length;i++){

            if(arr[i+1]<arr[i]){
          flag=1;
            int temp=arr[i];
            arr[i]=arr[i+1];
            arr[i+1]=temp;
            //两个两个比较,若前面的值大于后面的值,则两者交换,进行length轮,每一轮都选出最大值放到后面已排序部分
            }
        }
   }
    }



int main(){
srand((unsigned int)time(NULL));
int arr[MAXSIZE];
initArr(arr.MAXSIZE);
showARR(arr,MAXSIZE);
bubSort(arr,MAXSIZE);
system(pause);
return 0;
}