冒泡排序法c语言简单例子
冒泡排序的例子?
冒泡排序的例子?
快速排序:quicksort:找数组中一个数,把比他大的放到左边,比他小的放到右边,然后用递归排他左右边的,直到排完,复杂度O(nlgn)。
4,2,1,6,5.开始选4-2,1,4,6,5,再在2,1里选2-1,2,在6,5里选6-5,6这样就完了1,2,4,5,6.
冒泡排序:bubblesort:简单的方法,从第一个数开始,依次和后面比较,比后面大就往后移动,直到排完,举例:5,1,2,3,4.先看5-1,5,2,3,4-1,2,5,3,4-1,2,3,5,4-1,2,3,4,5.这例子特殊,一下排完,事实上复杂度为O(n*n);
插入排序:insertionsort:简单的方法,和打牌时排序一样,复杂度O(n*n)
1,3,2,4,7,5-1,2,3,4,7,5-1,2,3,4,5,7.
堆:heapsort:和树比较像,有根大枝小或根小枝大的特点,很难讲明白,时间复杂度为O(n*lgn)
建议看《算法导论》,或《programmingpearls》很清楚。
冒泡排序程序?
冒泡排序算法的原理如下:
1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
c语言如何用冒泡法排序?
冒泡排序是排序算法中较为简单的一种,英文称为Bubble Sort。它遍历所有的数据,每次对相邻元素进行两两比较,如果顺序和预先规定的顺序不一致,则进行位置交换;这样一次遍历会将最大或最小的数据上浮到顶端,之后再重复同样的操作,直到所有的数据有序。
如果有n个数据,那么需要的比较次数,所以当数据量很大时,冒泡算法的效率并不高。
当输入的数据是反序时,花的时间最长,当输入的数据是正序时,时间最短。
平均时间复杂度:
空间复杂度:O(1)
#include stdio.h
void swap(int *t1, int *t2)
{
int temp
temp *t1
*t1 *t2
*t2 temp
}
void bubble_sort(int arr[], int len)
{
int i, j
for (i 0 i lt len -1 i ) {
for (j 0 j lt len -1 -i j ) {
if (arr[j] gt arr[j 1]) {
swap(amparr[j], amparr[j 1])
}
}
}
}
int main()
{
int arr[] {34, 27, 55, 8, 97, 67, 35, 43, 22, 101, 78, 96, 35, 99}
int i
int len sizeof(arr) / sizeof(*arr)
bubble_sort(arr, len)
printf(len %d