排序的几个基本算法

 

 

1、顺序排序:数组内部做排序

第一个和第二个做比对,第一个和第三个多比对,第一个和第四个做比对,以此类推。

 

//顺序排序
void sort_xunxu(int * a,int n)
{// a 数组地址,n: 数组的长度
    int i, j;
    int tmp = NULL;

    for (i = 0; i < n - 1; i++)
    {
        for (j = i + 1; j < n;j++)
        {// 升序
            if (a[i]>a[j])
            {
                tmp = a[i];
                a[i] = a[j];
                a[j] = tmp;
            }
        }
    }
}

2、冒泡排序

顾名思义,就和冒泡泡一样,两个两个对比,谁比较大谁上去。

第一个和第二个比较,第二个和第三个比较,以此类推。

// 冒泡排序
void sort_maopao(int *a,int n)
{

    int i = 0, j = 0;
    int tmp = 0;

    for (i = 0; i < n - 1;i++)
    {
        for (j = 0; j < n - 1 - i;j++)
        {  // 升序
            // 两两对比
            if (a[j]>a[j+1])
            {
                tmp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = tmp;
            }
        }
    }
}

 

 

3、选择排序

就是记录最大值(或者最小值),互换位置。

// 选择排序
void sort_xuanze(int *a,int n)
{
    int i, j;
    int min;
    int tmp;

    for (i = 0; i < n - 1;i++)
    {  // 选择最小值
        min = i;
        for (j = i + 1; j < n;j++)
        {   // 判定谁打,选择小的位置
            if ( a[min]>a[j])
            {// 选择最小值的位置
                min = j;
            }
            // 当最小值的位置如果不是自己的话,就换
            if (min != i)
            {
                tmp = a[min];
                a[min] = a[i];
                a[i] = tmp;
            }
        }
    }
}
时间: 2025-01-02 04:02:45

排序的几个基本算法的相关文章

图的拓扑排序、关键路径、最短路径算法 -- C++实现

一:拓扑排序 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前.通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列. 拓扑排序就是要找到入度为0的顶点,并依次压栈.首先将栈顶顶点输出,删除以此顶点为弧尾的顶点,并更新其他顶点的入度.若入度为0,则继续压栈.更新完毕继续出栈,直至栈空.元素出栈并输出

排序系列 之 直接插入排序算法 —— Java实现

直接插入排序算法 基本思想: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中取出第一个元素,将它插入到有序表中,使之成为新的有序表,重复n-1次完成整个排序过程. 实例: 0.初始状态 3,1,5,7,2,4,9,6(共8个数)    有序表:3:无序表:1,5,7,2,4,9,6 1.第一次循环,从无序表中取出第一个数 1,把它插入到有序表中,使新的数列依旧有序    有序表:1,3:无序表:5,7,2,4,9,6 2

STL查找、排序、替换、集合算法

1.STL查找算法 (1).代码如下: #include<iostream> #include<vector> #include<algorithm> using namespace std; //查找算法!!! void main_adjacent_find(){     vector<int> v1;      v1.push_back(1);     v1.push_back(2);     v1.push_back(2);     v1.push_b

排序系列 之 折半插入排序算法 —— Java实现

基本思想: 折半插入算法是对直接插入排序算法的改进,排序原理同直接插入算法: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中取出第一个元素,将它插入到有序表中,使之成为新的有序表,重复n-1次完成整个排序过程. 与直接插入算法的区别在于:在有序表中寻找待排序数据的正确位置时,使用了折半查找/二分查找. 实例: (参考直接插入排序算法:http://www.cnblogs.com/snowcan/p/6244128.htm

必须知道的八大种排序算法【java实现】(二) 选择排序,插入排序,希尔算法【详解】

一.选择排序 1.基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换:然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止. 2.实例 3.算法实现 /** * 选择排序算法 * 在未排序序列中找到最小元素,存放到排序序列的起始位置 * 再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾. * 以此类推,直到所有元素均排序完毕. * @param numbers */ public static void selectSort(in

排序算法(三)冒泡、选择排序的Python实现及算法优化详解

说在前面 最近一年太忙,博客长草了.近日用Python实现了常用排序算法,供大家参考. Java版本排序算法及优化,请看以前的文章. <排序算法之简单排序(冒泡.选择.插入)> <排序算法(二)堆排序> 1.排序概念 这里不再赘述,请参看前面2篇文章 2.简单排序之冒泡法Python实现及优化 原理图 2.1.基本实现 num_list = [     [1, 9, 8, 5, 6, 7, 4, 3, 2],     [1, 2, 3, 4, 5, 6, 7, 8, 9] ] nu

查找与排序01,线性查找,时间复杂度,算法

线性查找,肯定是以线性的方式,在集合或数组中查找某个元素.本篇包括: 通过代码来理解线性查找 时间复杂度 什么是算法 通过代码来理解线性查找 什么叫"线性"?还是在代码中体会吧. 首先需要一个集合或数组,如何得到呢?就生成一个固定长度的随机数组吧.然后输入一个查找key,如果找到就返回元素的索引,没找到就返回-1,就这么简单. class Program { private static int[] arr; private static Random r = new Random()

Javascript中的冒泡排序,插入排序,选择排序,快速排序,归并排序算法详解

http://baozoumanhua.com/users/10873617/articleshttp://baozoumanhua.com/users/10873639/articleshttp://baozoumanhua.com/users/10873665/articleshttp://baozoumanhua.com/users/10873687/articleshttp://baozoumanhua.com/users/10873718/articleshttp://baozouma

算法 希尔排序

希尔排序 Shell Sort 介绍: 希尔排序(Shell Sort)也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本. 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个"增量"的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序.因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率比直接插入排序有较大提高. 执行流程: 首先