C语言-排序-快速排序

快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

假设要排序的数组是A[1]……A[N],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。一趟快速排序的算法是:

1)设置两个变量I、J,排序开始的时候 I=0,J=N-1;

2)以第一个数组元素作为关键数据,赋值给X,即X=A[0];

3)从J开始向前搜索,即由后开始向前搜索,找到第一个小于X的值,两者交换;

4)从I开始向后搜索,即由前开始向后搜索,找到第一个大于X的值,两者交换;

5)重复第3、4步,直到I=J;

--------------------- 参考代码 -------------------------

void quiksort(int a[],int low,int high)
{
    int i = low;
    int j = high;
    int temp = a[i]; 

    if( low < high)
    {
        while(i < j)
        {
            while((a[j] >= temp) && (i < j))
            {
                j--;
            }
            a[i] = a[j];
            while((a[i] <= temp) && (i < j))
            {
                i++;
            }
            a[j]= a[i];
        }
        a[i] = temp;
        quiksort(a,low,i-1);
        quiksort(a,j+1,high);
    }
    else
    {
        return;
    }
}

int main()
{
    int arry[5] = {23,1,21,4,19};
    quiksort(arry,0,4);
    for(i=0;i<5;i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
}

  

时间: 2024-10-13 14:34:10

C语言-排序-快速排序的相关文章

C语言排序---快速排序

/* 快速排序由C. A. R.Hoare在1962年提出,是对冒泡排序的一种改进. * 它的基本思想是: * 通过一趟排序将要排序的数据分割成独立的两部分 * ,其中一部分的所有数据都比另外一部分的所有数据都要小 * ,然后再按此方法对这两部分数据分别进*/ #include<stdio.h>#define N 30int QSort(int a[N],int l,int r){ int m,i,j,p; if(l>=r)return 0; /*递归出口,当序列长度小于等于0时,视为排

杂文 - [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

C语言排序算法复习

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

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++)        {    

基础算法之排序--快速排序

1 /************************************************************************************** 2 * Function : 快速排序 3 * Create Date : 2014/04/21 4 * Author : NTSK13 5 * Email : [email protected] 6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性. 7 * 任何单位和个人不经本人允许不

排序 快速排序

*/--> pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;}

C语言排序算法总结

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

单链表的排序 快速排序 归并排序 quicksort mergesort

原理都很简单,关键是某些边界能否正确写对: #include<iostream> #include<stdio.h> using namespace std; class Node { public: int val; Node* next; Node(int val = 0):val(val),next(NULL){ } }; Node* quicksort(Node* head, Node* tail) { Node *res1 = NULL, *res2 = NULL; No

排序——快速排序法

快速排序法基本思想: 快速排序(Quicksort)是对冒泡排序的一种改进.由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列. 程序代码: #include <stdio.h> void print(int a[], int n) { int j; for(j=0; j < n