优化后的排序冒泡排序算法.c

来源:互联网 发布:半自动咖啡机推荐 知乎 编辑:程序博客网 时间:2024/06/05 14:52
#include#include#define MAX 30int main(void){int i, j = 0, k = 0, min, sign, tag = 1;/*优化一、定义一个tag检查每次内层循环是否交换了数据情况1: 交换了数据说明此时数组仍处于无序状态,tag = 0;情况2:未交换数据说明此时数据已经有序, tag = 1不需要继续进行接下来的循环了 break; 跳出循环优化二、每次一冒泡进行遍历数组,只是冒上去了你想要的最大值或者最小值思考优化:每次带上去一个最大值或最小值,那么就可以,带回来最小 值或者最大值,那么排序所花费的时间就会减少一半。*/int array[MAX];printf("\n*************************************************************\n");printf("未排序的数组:");for (i = 0; i < MAX; i++)//给数组赋初值 并 打印出来{array[i] = (rand() % 100);//rand()函数包含在stdlib.h函数库中,功能是返回一个随机值printf("%4d", array[i]);}printf("\n*************************************************************\n");printf("\n\n\n*************************************************************\n");for (i = MAX - 1; i > 0; i--){sign = k;//初始化标记位置tag = 1;//每次交换数据前需要初始化min = array[k];//中间无序序的是最小值for (j = k; j < i; j++){if (array[j] > array[j + 1])//如果 array[j] 大于 array[j + 1]交换值,大的数字'冒'到了数组的后面去{int tmp;tmp = array[j];array[j] = array[j + 1];array[j + 1] = tmp;tag = 0;//交换数据,tag赋值为0}if (array[j] < min){min = array[j];//更新最小值sign = j;//记录最小值的位置}}if (tag == 1)//未交换数据直接退出{break;}//交换找到的最小值和未排序的首元素的值//此处建议使用定义一个临时变量交换数值,如果当k == sign 时,就会出错{int tmp;tmp = array[k];array[k] = array[sign];array[sign] = tmp;}k++;}printf("排序后的数组:");for (i = 0; i < MAX; i++){printf("%4d",array[i]);}printf("\n*************************************************************\n");system("pause");return 0;}
原创粉丝点击