bubblesort.c这是维基百科上的说明,很详细
#include <stdio.h> #include <stdlib.h> #include <time.h>
int main(int argc, char *argv[]) { int arr[10]; srand(time(NULL)); int i;
for (i = 0; i < 10; i ++) arr[i] = rand() % 100;
int j; int tmp; int sign;
for (i = 0; i < 10 - 1; i ++) { sign = 1; for (j = 0; j < 10 - 1 - i; j ++) { if (arr[j] > arr[j+1]) { tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; sign = 0; } } if (sign == 1) break; }
for (i = 0; i < 10; i ++) printf("arr[%d] = %d\n", i, arr[i]);
return 0; }
冒泡排序有两个循环,最里面的循环的意思:
先说进行完一次内循环的效果,就是,找出了剩下所有元素中最大的,放在了最后面。
这个最大怎么找呢,就是j从0开始到10 - 1 - i,两个两个的逐渐比较,arr[j] > arr[j+1]这样,j每次加上,这样就是
一个数会比较两次,一次是在arr[j+1]的位置上,一次是在arr[j]的位置上,因为j++了。如果符合条件就互换位置。
进行一次内循环就会有一个元素找到了自己的位置,所以在进行下次循环的时候就不用再管他了,所以内层循环是10 - 1- i,
每次少一个元素,这样,就是外层那个循环的次数了,10 - 1。好比这里10个元素,为什么外层循环是9次呢?
因为你排好倒数第二个了,倒数第一个肯定就是那个位置了。
然后就是里面的sign的作用了。如果一个内循环,一次都没有交换数据,说明这个已经是排好序了,根本不用再继续了,
所以弄这么个东西了判断一下。
时间: 2024-11-02 09:39:40