沧县网站制作,一个网站要怎么做的吗,wordpress数据都被存在哪里,手机微网站目录
一、原理
二、代码演示
三、代码优化 一、原理
假设#xff1a;
int arr[] { 9,8,7,6,5,4,3,2,1,0 };
将 arr 内的元素进行升序排列#xff0c;得到一个新的数组
int arr[] { 0#xff0c;1#xff0c;2#xff0c;3#xff0c;4#xff0c;5#xff0c;…目录
一、原理
二、代码演示
三、代码优化 一、原理
假设
int arr[] { 9,8,7,6,5,4,3,2,1,0 };
将 arr 内的元素进行升序排列得到一个新的数组
int arr[] { 0123456789 };
这个过程中我们可以使用冒泡排序。 如上图所示冒泡排序便是数组元素之间进行俩俩交换类似于之前比大小中的打擂台设立一个擂主进行打擂完成条件进行交换便是打擂成功直到最后抵达它应该所在的位置便是结束打擂。
此时开始设立第二个擂主进行打擂而且新设立的擂主不能打上一任的擂主和之前的擂主且上一任的擂主必须保持原地不动而打一次通关则需要看需要打败的人数以及之前的擂主和上一任擂主。
以此类推得到最后的结果。
且最后每一任擂主需要进行的打擂次数便是交换次数有几个擂主便是需要进行几趟的冒泡排序。
最后我们便得到以下代码。
二、代码演示
int dio(int arr[], int sz)
{int i 0; for (i 0; i sz; i){//需要进行一趟冒泡排序int j 0;for (j 0; j sz - 1 - i; j)//之前的擂主不动且不能和上之前的擂主进行决斗//且前几任擂主和冒泡排序的趟数有关{if (arr[j] arr[j 1])//达成条件后进行交换{//经典的交换代码int temp arr[j 1];arr[j 1] arr[j];arr[j] temp;}}}
}
void print(int *arr, int sz)
{int i 0;for (i 0; i sz; i){printf(%d ,arr[i]);}
}
int main()
{int arr[] {1,3,5,2,8,7,9,6,4,0,10, };int sz sizeof(arr) / sizeof(arr[0]);dio(arr,sz);//调用函数进行冒泡排序print(arr, sz);//打印冒泡排序后的数组return 0;
}三、代码优化
以上的代码有个缺点那便是遇见了显而易见的只需要极少的交换次数便能够完成的排序时也需要进行多趟的冒泡排序需要每一个元素都进行比较和排序这导致效率极其的低下所以我们在此多添加一个内容。
int arr[] {91234567810 };
那便是一个假设若满足了交换的内容则假设失效若没有满足则假设成功。
int dio(int arr[], int sz)
{int i 0; int flag 1;//进行假设,假设有序for (i 0; i sz; i){//需要进行一趟冒泡排序int j 0;for (j 0; j sz - 1 - i; j)//上一任的擂主不动且不能和上一任擂主进行决斗{if (arr[j] arr[j 1])//达成条件后进行交换{//经典的交换代码int temp arr[j 1];arr[j 1] arr[j];arr[j] temp;flag 0;//假设失败}}if (flag 1){break;}}
}
void print(int *arr, int sz)
{int i 0;for (i 0; i sz; i){printf(%d ,arr[i]);}
}
int main()
{int arr[] {1,3,5,2,8,7,9,6,4,0,10, };int sz sizeof(arr) / sizeof(arr[0]);dio(arr,sz);//调用函数进行冒泡排序print(arr, sz);//打印冒泡排序后的数组return 0;
}