冒泡排序c语言实现
冒泡排序的基本思想是:
1.在长度为n的数组,通过不断比较两个相邻元素,把值大的往后移动,当遍历完最后一个元素时,最大值存放在数组[n-1]下标位置。
2.通过步骤1的比较后,数组长度为n-1(因为arr[n-1]的元素已是整个数组最大的,没必要再比较),然后再在长n-1的数组中找出次大的数放到
arr[n-2]位置,比较完成后数组无序部分长度为 n-2,然后循环执行这步直到数组无序部分长为1。
// 在长为len 的数组中,循环 n-2次比较,把最大值放在 arr[n-1]位置void buble(int arr[], int len)
{
for(int i = 0; i < len-1; i++)
{
if(arr[i] > arr[i+1])
{
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}以上完成把数组最大的元素放在arr[n-1]位置,现在数组无序的部分只有前面的arr[0]~arr[n-2],则循环设置数组长度设置为 n-1(找出次大的放在arr[n-2]), n-2, ..., 1, 最后完成
排序,第二步代码为
void bubble_sort(int arr[], int len)
{
for(int i = len; i > 0; i--) //数组从长到短,每循环一次,当前数组的最大值放在其最后位置
buble(arr, i);
}总的就是
#include<stdio.h>
void buble(int arr[], int len)
{
for(int i = 0; i < len-1; i++)
{
if(arr[i] > arr[i+1])
{
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
void bubble_sort(int arr[], int len)
{
for(int i = len; i > 0; i--)
buble(arr, i);
}
int main()
{
int array[6]={5, 4, 3, 5, 1};
bubble_sort(array,5);
for(int i=0;i<5;i++)
{
printf("%d ",array[i]);
}
printf("\n");
return 0;
}输出为:
1 3 4 5 5
当两个相邻且相等的元素在比较时,即执行if( arr[i] > arr[i+1]) 时不会交换两个元素的位置,所有冒泡排序是稳定的。