十大排序算法合集(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; }