#排序算法#【1】概述、冒泡排序、选择排序

排序算法分类:

  1. 内部排序(在排序过程中不需要访问外存就可以完成排序)

  2. 外部排序

内部排序分类:

  1. 交换排序
    • 冒泡排序

    • 快速排序

  2. 选择排序
    • 直接选择排序

    • 堆排序

  3. 插入排序
    • 直接插入排序

    • 希尔排序

  4. 合并排序

外部排序:

常见的是多路归并算法,即将原文件分为多个能够一次装入内存一部分,分别把每一部分调入内存完成排序,然后对已经排序的子文件进行归并排序

冒泡排序法:


  冒泡排序法是一种相邻数据交换的排序方法。

  冒泡排序法的基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键字的次序与排序要求的规则不符时,就将这两个记录进行交换。这样,关键字较小的记录将逐渐从后面向前面移动,就象气泡在水中向上浮一样,所以该算法也称为气泡排序法。

   
 

  核心代码如下:


//冒泡排序
//a 传递的要排序的数组
//n 数组元素的长度
void BubbleSort(int a[],int n){
int i,j,temp;
int flag = 0;
for(i = 0 ; i < n ; i++){
for(j = n - 1 ; j > i; j--){
if(a[j] < a[j-1]){
temp = a[j-1];
a[j-1] = a[j];
a[j] = temp;
flag = 1;
}
}

//如果一遍下来没有数据交换,则不需要再继续循环
if(flag == 0)
break;
else
flag = 0;
}
}

简单选择排序法


  选择排序的基本思想:对n个记录进行扫描,选择最小的记录,将其输出,接着在剩下的n-1个记录中扫描,选择最小的记录将其输出,不断重复这个过程,直到只剩一个记录为止。

  

  核心代码如下:


//简单选择排序
//a 要排序的数组
//n 数组的元素个数
void SelectSort(int a[],int n){
int i,j,k,;
int temp;

for(i = 0 ; i < n-1 ; i++){
k = i;
for(j = i+1 ; j < n ; j++){
if(a[j] < a[k])
k = j;
}

if(k != i){
temp = a[i];
a[i] = a[k];
a[k] = temp;
}

}
}

  

#排序算法#【1】概述、冒泡排序、选择排序,布布扣,bubuko.com

时间: 2024-09-29 22:37:02

#排序算法#【1】概述、冒泡排序、选择排序的相关文章

【数据结构】——排序算法——3.1、选择排序

      [数据结构]--排序算法--3.1.选择排序 一.先上维基的图: 分类 排序算法 数据结构 数组 最差时间复杂度 О(n2) 最优时间复杂度 О(n2) 平均时间复杂度 О(n2) 最差空间复杂度 О(n) total, O(1)auxiliary 二.描述: 选择算法算是最直观的一个了.每次在队列里抽取一个极大(或极小)值进行排列.每次都需要遍历未被抽取的元素队列. 三.Java程序: static void selection_sort(int[] unsorted) { for

常见排序算法导读(3)[简单选择排序]

这一节将介绍简单选择排序(Simple Selection Sort). 在介绍简单排序算法之前,先给出排序的确切定义,并简单介绍一下排序算法的稳定性. 排序的确切定义 假设含有n个对象的序列为{R[0], R[1], ..., R[n-1]}, 其对应的关键字(key)序列为{K[0], K[1], ..., K[n-1]}. 所谓排序, 就是确定0, 1, ..., n-1的一种排列p[0], p[1], ..., p[n-1], 使各个关键字满足如下的非递减(升序)或非递增(降序)关系:

排序算法(二)——选择排序及改进

选择排序 基本思想 冒泡排序中有一个缺点,比如,我们比较第一个数a1与第二个数a2的时候,只要a1比a2大就会交换位置,但是我们并不能确定a2是最小的元素,假如后面还有比它更小的,该元素还会与a2再次进行交换,而且这种交换有可能发生多次才能确定a2的最终位置. 选择排序可以避免这种耗费时间的交换操作,从第一个元素开始,扫描整个待排数组,找到最小的元素放之后再与第一个元素交换位置,然后再从第二个元素开始,继续寻找最小的元素与第二个元素交换位置,依次类推. java实现 //选择排序 public

排序01---[排序基本知识&amp;&amp;冒泡排序&amp;&amp;选择排序&amp;&amp;堆排序]

1.排序基本知识 1.1初始排序 1.2十大排序算法 2.冒泡排序(Bubble Sort) 2.1Baseline static void bubbleSort1(Integer[] array) { for (int end = array.length - 1; end > 0; end--) { for (int begin = 1; begin <= end; begin++) { if (array[begin] < array[begin - 1]) { int tmp =

排序算法总结之直接选择排序

概念 每一趟在最后的n-i+1(i=1,2,...,n-1)中取最小的记录作为有序表的第i个记录 动态效果: 优点:算法简单,容易实现 缺点:每次只能确定一个元素 Java实现: package com.liuhao.sort; import java.util.Arrays; //定义一个数据包装类 class DataWrap implements Comparable<DataWrap>{ int data; String flag; public DataWrap(int data,

算法 排序lowB三人组 冒泡排序 选择排序 插入排序

参考博客:基于python的七种经典排序算法   [经典排序算法][集锦]     经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. 排序的稳定性: 经过某种排序后,如果两个记录序号同等,且两者在原无序记录中的先后秩序依然保持不变,则称所使用的排序方法是稳定的,反之是不稳定

【数据结构】常用排序算法(包括:选择排序,堆排序,冒泡排序,选择排序,快速排序,归并排序)

直接插入排序: 在序列中,假设升序排序 1)从0处开始. 1)若走到begin =3处,将begin处元素保存给tmp,比较tmp处的元素与begin--处元素大小关系,若begin处<begin-1处,将begin-1处元素移动到begin:若大于,则不变化.再用tmp去和begin--处的元素用同样的方法去作比较,直至begin此时减少到数组起始坐标0之前结束. 3)以此类推,依次走完序列. 时间复杂度:O() 代码如下: //Sequence in ascending order  voi

【算法】插入排序/冒泡排序/选择排序

插入排序 插入排序的思想为:从数组的第二个元素开始遍历整个数组.针对每个元素,依次将其前面的所有元素和他进行比较,大于它的元素均向后移动,最后将该元素插入. 插入排序是一种稳定的排序算法. 时间复杂度T(n)=O(n^2) 最好情况下已排好序,T(n)=O(n) private void swap(int[] a, int i, int j) { int temp = a[j]; a[j] = a[i]; a[i] = temp; } 插入排序的关键代码 private void insertS

Java排序算法(二):简单选择排序

[基本思想] 在要排序的一组数中.选出最小的一个数与第一个位置的数交换:然后在剩下的数中再找出最小的与第二个位置的数交换,如此循环至倒数第二个数和最后一个数比較为止. 算法关键:找到最小的那个数.并用变量记住它的下标. [java实现] public class SimpleSelectionSort { public static void main(String[] args) { int[] arr = { 9, 1, 5, 8, 3, 7, 4, 6, 2 }; System.out.p

常见的排序算法(二) 选择排序

选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. 选择排序: 思想 n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果: ①初始状态:无序区为R[1..n],有序区为空. ②第1趟排序 在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区