选择冒泡排序

1、选择排序

(1)、算法思想:依次是下标为(0,1,2,....n)的数字和其后的所有数字进行比较,每一轮的比较结果:都先确定最前面的是最小的数字;

(2)、代码实现

#include<stdio.h>

void sort(int *a, int count);
void showArray(int *a, int count);

void showArray(int *a, int count){
    int i;

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

void sort(int *a, int count){
    int i;
    int j;
    int tmp;

    for(i = 0; i < count; i++){
        for(j = i+1; j < count; j++){
            if(a[i] > a[j]){
                tmp = a[i];
                a[i] = a[j];
                a[j] = tmp;
            }
        }
    }
}

void main(void){
    int a[] = {3 ,5 ,6, 1, 7, 2, 9, 8};
    int count = sizeof(a)/sizeof(int);

    sort(a, count);
    showArray(a, count);
}

(3)、结果打印

(4)、算法分析

时间复杂度为:O(n^2);

2、交换(冒泡)排序

(1)、算法思想:相邻的2个数字,两两进行比较,每一轮的排序结果:最大的数字在最后面的位置;

(2)、代码实现

#include<stdio.h>

void swapSort(int *a, int count);
void showArray(int *a, int count);

void showArray(int *a, int count){
    int i;

    for(i = 0; i < count; i++){
        printf("%d ", a[i]);
    }

    printf("\n");
}

void swapSort(int *a, int count){
    int i;
    int j;
    int tmp;

    for(i = 0; i < count; i++){
        for(j = 0; j < count-i; j++){
            if(a[j] > a[j+1]){ //将大的数字放在最后面
                tmp = a[j];
                a[j] = a[j+1];
                a[j+1] = tmp;
            }
        }
    }
}

void main(void){
    int a[] = {3, 5, 7, 9, 1, 6, 10};
    int count = sizeof(a)/sizeof(int);

    swapSort(a, count);
    showArray(a, count);
}

(3)、结果截图

(4)、算法分析

时间复杂度:O(n^2);


时间: 2024-12-23 11:45:45

选择冒泡排序的相关文章

基本排序(包括插入,选择,冒泡排序)

比较重要的三种基本排序其中插入排序最优,选择排序居中,冒泡排序最差 package com.zzw.排序; public class Alogrithm { public static void main(String[] args) { int[] datas = new int[10]; // 初始化数据 initData(datas); // 打印初始数据 printData(datas); // 对数据进行排序 selectSort(datas); // 打印排序后的数据 printDa

iosOC可变数组选择,冒泡排序

#pragma mark 可变数组的排序 NSMutableArray * array = [NSMutableArray arrayWithObjects: @"1",@"8",@"2",@"7",@"2",@"5",@"9",nil]; //选择 for (int  i =0; i<[array count]-1; i++) { for (int j = i

JAVA 蹒跚自学之 第七日 数组选择 冒泡排序优化

原来的选择排序代码 int [] arr = new int[]{3,2,6,9,34,66,11}; public static void xuanze(int[] arr) { for (int x=0;x<arr.length-1;x++) { for(int y=x+1:y<arr.length;y++) { if(arr[x]>arr[y] { arr[x]=arr[x]^arr[y]; arr[y]arr[x]^arr[y]; arr[x]=arr[x]^arr[y]; }

算法之旅——冒泡排序及选择排序

冒泡排序和选择排序是排序算法中比较简单的两种算法. 冒泡排序的思想是:比较相邻的元素.如果第一个比第二个大,就交换他们两个.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,针对所有的元素重复以上的步骤,这样每次参与比较的元素就越来越少,直到没有任何一对数字需要比较.对N个数字进行冒泡排序,需要进行N-1趟比较,第i趟中需要进行N-i次比较.由于冒泡排序中每趟都重复比较了很多元素,导致此算法的时间效率不是很高,其平均时间复杂度为O(n*n). 这里给出一份冒泡排序的参考代码: //de

Java数据结构和算法(三)——冒泡、选择、插入排序算法

上一篇博客我们实现的数组结构是无序的,也就是纯粹按照插入顺序进行排列,那么如何进行元素排序,本篇博客我们介绍几种简单的排序算法. 1.冒泡排序 这个名词的由来很好理解,一般河水中的冒泡,水底刚冒出来的时候是比较小的,随着慢慢向水面浮起会逐渐增大,这物理规律我不作过多解释,大家只需要了解即可. 冒泡算法的运作规律如下: ①.比较相邻的元素.如果第一个比第二个大,就交换他们两个. ②.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大的数(也就是第一波冒泡完成

常见的排序算法

描述: 排序算法可谓数据结构模块中的重中之重,常见的哈希表,二叉树,搜索树/平衡树,位图等数据结构只是处理实际问题的抽象方法,实际在处理接受或生成的数据集时,排序算法显得尤其重要,排序算法家族很庞大,其中包括了冒泡排序,选择排序,插入排序,堆排序,快速排序,归并排序,基数排序,计数排序,希尔排序,箱排序,树型排序等众多算法,每种排序都有各自的特性,没有好坏之分,只有在特定的场景使用合适的排序算法才是上策,单纯的来比显得太过绝对,没有可比性.因为实际需求及各方面条件的限制使得排序算法的可选范围往往

设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕该功能.如查找.排序等,一种经常使用的方法是硬编码(Hard Coding)在一个类中,如须要提供多种查找算法,能够将这些算法写到一个类中,在该类中提供多个方法,每个方法相应一个详细的查找算法:当然也能够将这些查找算法封装在一个统一的方法中,通过if-else-或者case等条件推断语句来进行选择.

转:策略模式

原文地址:http://blog.csdn.net/hguisu/article/details/7558249 1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能.如查找.排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的查找算法:当然也可以将这些查找算法封装在一个统一的方法中,通过if-

JAVA之旅

JAVA之旅合集 JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 JAVA之旅(二)——if,switch,for,while,do while,语句嵌套,流程控制break , continue ,函数,重载的示例总结 JAVA之旅(三)——数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想 JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造