C语言-排序和查找

一 冒泡排序:算法特点:两层循环外层控制排序的趟数,内存控制相邻元素两两比较的次数。n个数共需n-1趟,(i=1;i<n;i++)趟数=n-1-1+1,其中第j趟需要相邻元素两两比较的次数为n-j。可以按照升序也可以安排降序排序。其实还可以优化。

oid Bubblesort(int *p,int n)
{
    int i,j,temp;
    for(i = 1;i < n;i++)
    {
        for(j = 0;i < (n - j);j++)
        {
            if(p[j]< p[j+1])
            {
                p[j]= p[j] + p[j+1];
                p[j+1]= p[j] - p[j+1];
                p[j]= p[j] - p[j+1];
            }
        }
    }
}

二 快速排序:有左起点和右终点,还有一个标准点(任选),先从右端开始寻找比标准小的值,再从左端选大于标准的值,然后将其交换,逐个进行这样的操作,知道前后两个指针相等此时记下该位置点并与标准点进行值交换,最终以标准为界,左端是小于标准点的一个序列,右边是大于标准值得序列,但这两个序列都是无序的。

然后分别对左边序列和右边序列进行函数递归调用重复上述过程。

void quicksort(int *p,int low,int high)
{
    int slect_std;
    int i,j;
    slect_std = p[low];
    i = low;
    j = high;
    while(i <= j)
    {
        while(p[slect_std] <= p[j] && (i<j))
            j--;
        while(p[slect_std] >= p[i] && (i<j))
            i--;
        if(i < j)
            p[i] = p[i] + p[j];
            p[j] = p[i] - p[j];
            p[i] = p[i] - p[j];

}
    p[i] = p[lown];
    slect_std = p[i];
    quicksort(p,low,i-1);
    quicksort(p,i+1,high);
}

C语言-排序和查找

时间: 2024-10-13 20:51:31

C语言-排序和查找的相关文章

C语言排序和查找

1.C语言选择排序算法及代码 选择排序是排序算法的一种,这里以从小到大排序为例进行讲解. 基本思想及举例说明 选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置:然后,选出第二小的数,放在第二个位置:以此类推,直到所有的数从小到大排序. 在实现上,我们通常是先确定第i小的数所在的位置,然后,将其与第i个数进行交换. 下面,以对 3  2  4  1 进行选择排序说明排序过程,使用min_index 记录当前最小的数所在的位置. 第1轮 排序过程 (寻找第1小的数所在的位置) 3

常用排序,查找,树算法集锦

本文转载至  http://blog.csdn.net/zhangkongzhongyun/article/details/8080466 分类: c语言2012-10-17 11:16 275人阅读 评论(0) 收藏 举报 算法google 前面写了好些排序,红黑树,B 树算法的文章,还剩下查找这一大块没有写,查找相关的算法代码已经实现,但是却没有写查找算法日志的闲情了,只好先在这里放出代码来,以后有空有闲情再补上吧. 算法代码 Google 仓库:点击这里 已完成算法 排序 插入排序 希尔排

排序,查找,qsort和bsearch的简单总结,scanf字符串截取

有一些时候,一些方便用户做的设计,往往会降低产品本身的安全性. 安全性与易用性,是一道产品设计者需要仔细思考的题. ========================================================================================================== 好了,切入正题.最近在练题,或者说刷题,发现自己不知道的东西还真不少,得好好补补啦~ 首先就是c语言的两个,也是唯一的两个与排序搜索相关的函数,记得之前自己还很仔细的去背

leetcode 题解:Search in Rotated Sorted Array II (旋转已排序数组查找2)

题目: Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this affect the run-time complexity? How and why? Write a function to determine if a given target is in the array. 说明: 1)和1比只是有重复的数字,整体仍采用二分查找 2)方法二 : 实现:  

杂文 - [1.1]使用库语言排序算法

[1.1]使用库语言排序算法 本文地址: http://blog.csdn.net/caroline_wendy 如果不缺少内存, 可以直接使用库的排序算法. 使用库语言的排序程序: C语言性能最好的算法是快速排序(quick sort). C++性能最好的是集合(set)的排序算法. C语言代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <std

java 数组比较,元素的比较,Comparable,Comparator比较的应用实现,排序,查找示例

java 数组比较,元素的比较,自定义Comparator的实现,排序,查找示例 package org.rui.array.compar; import java.util.Arrays; import java.util.Random; import org.rui.generics.anonymity.Generator; /** * 程序设计的基本目标是"将保持不变的事物与会发生改变的事物相分离" * 而这是,不变的是通用的排序算法,变化的是各种对象相互比较的方式, * 因此,

C语言排序算法总结

学计算机程序设计的应该都知道,算法是程序之魂.所谓算法,就是解决问题的方法加上有限的实现步骤.算法的特点有有穷性,确定性,有效性,有零个或多个输入,有一个或多个输出.下面我们就来简单总结一下C语言中的三种经典排序算法. 一.冒泡算法. 所谓冒泡排序法,就是对一组数字进行从大到小或从小到大排序的一种算法.具体方法是,相邻的数字两两交换.从第一个数值开始,如果相邻两个数的排列顺序与我们的期望不相同,则将两个数的位置进行交换(对调):如果其余我们期望的相同,则不交换位置.重复这样的过程,一直到最后没有

所有的排序、查找算法

import javax.mail.Part; /** * 顺序查找.排序 * * @author 曾修建 * @version 创建时间:2014-7-30 下午04:15:10 */ public class SequentialSearch { public static void main(String[] args) { Integer[] a = {1,2,3,4,5,7,6,88}; //二分查找非递归 System.out.println( "二分查找非递归实现 位置 : &qu

C语言排序算法复习

排序算法有很多种,这里在复习和分析的基础上,做一个自己的总结: 首先要知道有哪些排序算法,google一下,有云C语言7大经典排序算法(也有8大).主要包括冒泡排序,快速排序,选择排序,插入排序,希尔排序,归并排序,堆排序,8大的还有基数排序.各有各的版本,代码写法也各不相同.所以这里以整理思路为先,代码只是作为自己的一个备份. 搞清楚的概念:稳定排序和不稳定排序,就看序列中两个值相等的数,排完序之后的相对位置是否改变,如果改变了就不稳定. 内部排序和外部排序,只用到内存即可完成排序的就叫内部排