c-即输即排的冒泡排序法,可部分排对,原因何在

问题描述

即输即排的冒泡排序法,可部分排对,原因何在
 //用动态内存分配实现冒泡排序
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
    printf("Please input n: ");
    int n;
    scanf("%d",&n);
    //为数组p动态分配n个整数类型大小的空间
    int* p;
    if (!(p = (int*)calloc(n,sizeof(int))))
    {
        printf("Fail to allocate the memory.n");
        exit(1);
    }
    printf("Please input %d number: ",n);
    for (int i = 0; i < n; i++)
    {
        scanf("%d",p+i);
        for (int j = i;j >= 0; j--)
        {
            if (*(p + i) < *(p + j))
            {
                int t = 0;
                t = *(p + i);
                *(p + i) = *(p + j);
                *(p + j) = t;
            }
        }
    }
    printf("After sort, the number is show as follow: n");
    for (int i = 0; i < n; i++)
    {
        printf("%6d",p[i]);
    }
    printf("n");
    system("pause");
    return 0;
}

解决方案

先把冒泡排序函数写好,用的时候调用就行了

解决方案二:

冒泡排序本就是函数,随着元素增多,每次都执行就好啦~

时间: 2024-10-22 12:48:07

c-即输即排的冒泡排序法,可部分排对,原因何在的相关文章

【算法导论】冒泡排序法

冒泡排序法 时间复杂度:O(n*n) 基本思想:从数组最后一个元素开始,依次与前一个元素比较,若比前一个元素小,则与之交换位置,然后再与当前前一个元素比较,直到遇到比它大的元素为止.例如:假设数组为:a[5]={3,4,2,5,1};则运算过程为:首先1与5比较,由于1<5,从而交换位置,数组变为a[5]={3,4,2,1,5};然后1与当前前一个元素2比较,一直重复上述操作,经过一次循环后,数组变为a[5]={1,3,4,2,5};第二次循环从倒数第二个元素开始--,总共循环n-1次就可以得到

C语言经典冒泡排序法

C经典冒泡排序法 void BubleSort(int* siSortArray, int siLen) { bool bSwapped = true; do { bSwapped= false; for(int i = 0; i < siLen - 1; i++) { if (siSortArray[i] > siSortArray[i+1]) { int temp = siSortArray[i]; siSortArray[i]= siSortArray[i + 1]; siSortArr

c++-用冒泡排序法对10个数排序,怎么错了啊?

问题描述 用冒泡排序法对10个数排序,怎么错了啊? #includeusing namespace std;int main(){ int a[10]ij t; cout << ""input 10 numbers:"" << endl; for (i = 0; i < 10; i++) cin >> a[i]; cout << endl; for (j = 0; j < 9;j++) for (i = 0

c语言-C语言中的冒泡排序法(详细解说)

问题描述 C语言中的冒泡排序法(详细解说) 对输入的20个数进行排序,储存在数组中,在输入一个数,在不改变原序的情况下,输出这21个数.(麻烦各位大神解释清楚点,我还是新手!) 解决方案 C语言--冒泡排序法(详细注释) 解决方案二: 示例: #include"stdio.h" main() { int a[5],*p,i,t,j; for(i=0;i scanf("%d",&a[i]); printf(" "); for(i=0;i {

排序算法-关于冒泡排序法的疑惑

问题描述 关于冒泡排序法的疑惑 冒泡排序法的代码 int n=0; int temp = 0; for (int i = a.length - 1; i > 0; --i) { for (int j = 0; j < i; ++j) { if (a[j + 1] < a[j]) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; n++; } } } 由于我是菜鸟,我写的是这样的 int n = 0; int temp = 0; for (i

C语言冒泡排序法心得_C 语言

记得以前在大学里学习c语言的时候,刚开始是很吃力的. 入门级别的算法中有个叫冒泡排序法,也有称为气泡排序法.那时候刚接触它就对它的名字特别感兴趣,因为觉得很有意思.好了,废话不多说了,我们先一起简单回忆下这个冒泡排序法.  一.打印行和列一般是这样的一个简单代码,输出4行4列*: for(int i = 1,i < 5,i++){ for(int j = 1,j < 5,j++){ printf("*"); } printf("n\"); }  二.打印

用PHP写的一个冒泡排序法的函数简单实例_php实例

前几天遇到的一道关于算法的考题,要求用PHP语言实现对一个数组进行排序,我写了一个采用冒泡排序法的函数,和大家分享一下. <? //冒泡排序法 function bubble_sort($array) { $count = count($array); if($count <= 0) { return false; } for($i=0; $i<$count; $i++) { for($k=$count-1; $k>$i; $k--) { if($array[$k] < $a

JavaScript中的冒泡排序法_javascript技巧

利用sort()冒泡排序: var arr = [5,39,8,1,2,13,55]; arr = arr.sort(function(a,b){return a-b}); console.log(arr);//1,2,5,8,13,39,55 不声明第三个变量冒泡排序: 第一层遍历数组的个数(要遍历多少次),第二次遍历(共要循环几次) a = 10; //第一个元素 b = 5; //下一个元素 if(a>b){ a = a+b; // a(15) = 10 +5; b = a-b; // b

算法之【冒泡排序法】

冒泡排序法是一种较简单的数值大小排序的算法.主要逻辑是: 对于原始的一组线性数据,从头到尾依次两两比较,如果前者大于后者(或者相反)则交换两个数的位置.这样一遍做下来,数组最末端即是所有数中最大的(或最小的),接下来将除了最后一个数以外剩下的数据再进行一遍刚才的算法.以此类推,每一遍的数据都越来越少,直到最后只剩一个时结束,此时排序完成. Bubble Sort is a simple algorithm ofsequencing a pile of data, especially numer