双向冒泡

#include <stdlib.h>
 
int main()
{
	int arr[] = { 9,8,7,7,5,6,1,2,0,0 };
	for (int i = 0; i < 9; i++)
	{
          for (int j = 0; j < (9-i); j++)//找最大 { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } for (int k = 9; k > i; k--)//找最小 { if (arr[k-1] > arr[k]) { int temp = arr[k-1]; arr[k - 1] = arr[k]; arr[k] = temp; } } }
for (int i = 0; i < 10; i++) { printf("%d ", arr[i]); } return(0); }

 可优化:

1、可以在函数的开始定义一个flag=false,产生交换后置为true;如果在之后的某一趟遍历中没有产生交换,即flag=false就说明表有序,直接返回就可。

2、使用while,定义上下界,找到最大或最小后,修改上下界

posted @ 2022-09-17 21:32  durtime  阅读(28)  评论(0)    收藏  举报