当前位置:编程学习 > C/C++ >>

冒泡排序

冒泡排序的思想是两两比较待排序的数据,如果前面数据比后面数据大,则交换两个数据,伪代码如下:
[plain]
BUBBLESORT(A) 
    for i <-- 1 to length[A] 
        do for j <-- length[A] downto i+1 
            do if A[j] < A[j-1] 
                then exchange A[j] <--> A[j-1] 

BUBBLESORT(A)
    for i <-- 1 to length[A]
        do for j <-- length[A] downto i+1
            do if A[j] < A[j-1]
                then exchange A[j] <--> A[j-1]


例如:
A 5 4 3 2 1

第一趟遍历后:
A 1 5 4 3 2

第二趟遍历后:
A 1 2 5 4 3

第三趟遍历后:
A 1 2 3 5 4

最后:
A 1 2 3 4 5

可以看到冒泡排序是小的数据往上浮,大的数据往下沉,所以叫冒泡排序。
冒泡排序c代码如下:

[cpp]
void bubble_sort(int A[], int len) 

    int i, j; 
 
    for (i = 0; i < len; i++) { 
        for (j = len-1; j > i; j--) { 
            if (A[j] < A[j-1]) { 
                swap(&A[j], &A[j-1]); 
            } 
        } 
    } 

void bubble_sort(int A[], int len)
{
 int i, j;

 for (i = 0; i < len; i++) {
  for (j = len-1; j > i; j--) {
   if (A[j] < A[j-1]) {
    swap(&A[j], &A[j-1]);
   }
  }
 }
}
完整的c代码如下:
[cpp]
#include <stdio.h>  
 
void dump(int a[], int len) 

    int i; 
 
    for (i = 0; i < len; i++) { 
        printf("%3d", a[i]); 
    } 
    printf("\n"); 

 
void swap(int *a, int *b) 

    int tmp; 
 
    tmp = *a; 
    *a = *b; 
    *b = tmp; 

 
void bubble_sort(int A[], int len) 

    int i, j; 
 
    for (i = 0; i < len; i++) { 
        for (j = len-1; j > i; j--) { 
            if (A[j] < A[j-1]) { 
                swap(&A[j], &A[j-1]); 
            } 
        } 
    } 

 
int main(void) 

    int a[] = {5, 4, 3, 2, 1}; 
 
    int len = sizeof(a) / sizeof(a[0]); 
 
    dump(a, len); 
 
    bubble_sort(a, len); 
 
    dump(a, len); 
 
    return 0; 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,