一个循环实现冒泡法排序(并没有什么卵用)

冒泡法时间复杂度为O(n^2)

这个是改不了的

不可能因为用一个循环实现,就变成了O(N)。。。

所以,并没有什么卵用,只是一种写代码的方式而已。。。

//Swap 用宏实现

#define Swap(a,b,c) ((c)=(a),(a)=(b),(b)=(c))

//第一种方式,,,最简单的
void BubbleSortOneLoop(int ar[], int n)
{
    int i = 0;
    int l = 0;
    while (i < n - 1)//i还是控制最外层
    {
        if (ar[l] > ar[l +1])
        {
            int temp = 0;
            Swap(ar[l], ar[l + 1], temp);
        }
        l++;
        if (l >=n - i-1)//只不过在特殊点的时候改变l和i
        {
            l = 0;
            i++;
        }
    }
}
//第二种
void BubbleSortOneLoop2(int ar[], int n)
{
    int i = 0;
    int l = 0;
    while (i<n*n-1)//大次数为n*n-1,%n实现下标循环
    {
        if (ar[l%n] > ar[l%n + 1] && l%n<n-1-(i/n))//直接判断
        {
            int temp = 0;
            Swap(ar[l%n], ar[l%n + 1], temp);
        }
        l++; i++;
    }
}
时间: 2024-12-25 11:14:11

一个循环实现冒泡法排序(并没有什么卵用)的相关文章

8. 冒泡法排序和快速排序(基于openCV)

一.前言 主要讲述冒泡法排序和快速排序的基本流程,并给出代码实现,亲测可用. 二.冒泡法排序 冒泡法排序主要是将相邻两个值比较,把小的向前冒泡,大的向后沉淀,时间复杂度为O(n2).主要思想如下: 分为内外循环,每次外循环确定一个大的数据的具体位置,如下实例: 从图中可以看出,进过两次外循环就可以得到排序结果,随后的8次循环都浪费了,为了避免这种情况,我们可以设置一个状态参数,用来表示内循环是否发生数据的交换,从而作为外循环是否退出的信号. 三.快速排序 快速排序是最有效的排序方法之一,其主要思

数组-03. 冒泡法排序

数组-03. 冒泡法排序(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 徐镜春(浙江大学) 将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们.通过一遍扫描,则最后一个元素必定是最大的元素.然后用同样的方法对前N-1个元素进行第二遍扫描.依此类推,最后只需处理两个元素,就完成了对N个数的排序. 本题要求对任意给定的K(<N),输出扫描完第K遍后的中间

选择法和冒泡法排序接口

#define ret_ok 0 #define ret_err 1 #define ARRAY_SIZE 10 /*选择法排序*/ int Choice_Sort(int array[],int array_len) { int i = 0; int j = 0; int iMin = 0; int iTemp = 0; int iFlag = 0; for(i=0;i<array_len-1;i++) { iMin = i; for(j=i+1;j<array_len;j++) { if(

C语言实现冒泡法排序

首先我们看冒泡法排序的原理,假设有一个包含6个数字的数组其思路为:每次将相邻两个数比较,将小的调到前面,如果有6个数:8,7,5,4,2,0.第一次先将最前面的两个数8和7对调(看下图).第二次将第二个数和第三个数(8和5)对调.....如此总计进行了5次,得到7-5-4-2-0-8的顺序,可以看到:最大的数8已经沉底,成为最下面的一个数,而小的数上升.经过第一轮(5次比较)后,得到了最大的数9.   然后进行第二轮的比较(见下图),对余下的7,5,4,2,0进行新一轮的比较,以便使次大的数沉底

数组-03. 冒泡法排序(20)

1 #include<iostream> 2 using namespace std; 3 int main(){ 4 int i,j,n,k,a[100],tmp; 5 cin>>n>>k; 6 for(i=0;i<n;++i) 7 cin>>a[i]; 8 for(j=0;j<k;++j) 9 for(i=0;i<n-j-1;++i) //注意-1 10 if(a[i]>a[i+1]){ 11 tmp=a[i]; 12 a[i]=

冒泡法排序_c++实现

看完了郝斌老师的c语言视频,冒泡法排序,就试着写了.我觉得学习算法最重要的不是代码,而是它的原理. 代码: 1 /** 2 * Copyright (c) 1991 - 2016 Arvin Tang. 3 * All rights reserved. 4 * 5 * 文件名称:郝斌C语言视频教程_163_冒泡排序 6 * 简要描述:用冒泡法排序 7 * 8 * 当前版本:1.0 9 * 作 者: 10 * 完成日期:2016-1-9 11 * 修订说明: 12 * 13 * 取代版本: 14

C#冒泡法排序源码

如下内容内容是关于C#冒泡法排序的内容,应该对码农有一些用途. int[] myArray = new int[] { 10, 8, 3, 5, 6, 7, 4, 6, 9 }; for( int j=1;j<myArray.Length;j ++ ) { for(int i=0;i<myArray.Length - 1;i ++) { if( myArray[i]>myArray[i+1]) { int temp = myArray[i]; myArray[i] = myArray[i

php 冒泡法 排序

1 <?php 2 /** 3 * php 冒泡法 4 * @param $arr 5 * @param string $order 排序符 6 * @return $arr 7 */ 8 function orderarr(&$arr, $order = 'asc') 9 { 10 if (!$arr) return false; 11 $len = count($arr); 12 for ($i = 0; $i < $len; $i++) { 13 for ($j = 1; $j

冒泡法排序参考(Java)

package com.swift; public class Maopao { //冒泡法 public static void main(String[] args) { int[] arr= {28,2,38,1,390,17,10,9,323}; for(int i=0;i<10;i++) { for(int j=0;j<arr.length-1-i;j++) { if(arr[j]>arr[j+1]) { int temp; temp=arr[j]; arr[j]=arr[j+