//排序--冒泡排序法升级版 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> /* 冒泡排序: 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的数列,一次比较相邻的两个元素,如果他们的顺序错误就把他们交换过来。 走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 */ //冒泡法排序 void BubbleSort(int * arr, int num){ if (arr == NULL) { printf("传入参数不可以为空!\n"); return; } int i = 0, j = 0, exchange = 1, temp = 0; /* 升级版的精华所在,增加exchange变量 普通的冒泡排序需要遍历n轮,但是有可能n-1轮时候就已经排序完成了(部分数据本来有序),但是程序仍然会执行 升级版增加exchange变量,当判断在一轮排序中,任何2个元素都没有交换位置 说明该数组已经有序 */ for (i = 0; i < num&& exchange; i++) { exchange = 0; for (j = 0; (j<num - i - 1) ; j++) { if (arr[j]>arr[j+1]) { //交换位置 temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; exchange = 1; } } } } //打印数组 void Print(int * arr, int num){ if (arr == NULL) { printf("传入参数不可以为空!\n"); return; } int i = 0; for (int i = 0; i < num; i++) { printf("%5d", *(arr + i)); } printf("\n"); } void Test(){ int i = 0; int arr[10] = { 0 }; //定义时间类型变量 time_t ts; //生成随机数种子 srand((unsigned int)time(&ts)); for (i = 0; i < 10; i++) { arr[i] = (int)(rand() % 100); } //打印数组 printf("\n原始数据----\n"); Print(arr, 10); //冒泡法排序 printf("冒泡法排序之后的数据\n"); BubbleSort(arr, 10); Print(arr, 10); } void main(){ Test(); system("pause"); }
时间: 2024-11-05 18:28:01