冒泡排序思想
冒泡排序,就是相邻元素进行比较,比如:下图就是一趟冒泡排序,一趟把最大的数放在最后,下一趟把第二个最大的数字放在最后,依次比较下去。
详细代码
#include <stdio.h>
#include <stdlib.h>
void bubble_sort(int arr[], int sz)
{
int i = 0 ;
int j = 0 ;
for (i = 0 ; i < sz-1 ; i++)
{
for (j = 0 ; j < sz-1 -i; j++)
{
if (arr[j] > arr[j+1 ])
{
int temp = arr[j];
arr[j] = arr[j+1 ];
arr[j+1 ] = temp;
}
}
}
}
void print(int arr[], int sz)
{
int i = 0 ;
for (i = 0 ; i < sz; i++)
{
printf ("%d " , arr[i]);
}
printf ("\n" );
}
int main()
{
int arr[] = { 9 ,8 ,7 ,6 ,5 ,4 ,3 ,2 ,1 ,0 };
int sz = sizeof (arr) / sizeof (arr[0 ]);
print(arr, sz);
bubble_sort(arr, sz);
print(arr, sz);
system("pause" );
return 0 ;
}
代码优化,考虑如果数组本身有序
#include <stdio.h>
#include <stdlib.h>
void bubble_sort(int arr[], int sz)
{
int i = 0 ;
int j = 0 ;
int flag = 0 ;
for (i = 0 ; i < sz-1 ; i++)
{
for (j = 0 ; j < sz-1 -i; j++)
{
if (arr[j] > arr[j+1 ])
{
int temp = arr[j];
arr[j] = arr[j+1 ];
arr[j+1 ] = temp;
flag = 1 ;
}
}
if (flag == 0 )
break ;
}
}
void print(int arr[], int sz)
{
int i = 0 ;
for (i = 0 ; i < sz; i++)
{
printf ("%d " , arr[i]);
}
printf ("\n" );
}
int main()
{
int arr[] = { 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 };
int sz = sizeof (arr) / sizeof (arr[0 ]);
print(arr, sz);
bubble_sort(arr, sz);
print(arr, sz);
system("pause" );
return 0 ;
}