zoukankan      html  css  js  c++  java
  • 快速排序算法

    快速排序算法采用分治法思想;快速排序是冒泡排序的一种改进;

    快速排序的标志位的选取有一下几种情况:

    1.每次都取第一个元素,这样操作简单,但是效率不一定高

    2.每次都取最后一个元素,同上

    3.随机产生一个下标,用此下标所表示的数字作为标志位

    4.随机产生一个下标,用此下标所表示的数字与第一个元素交换,剩下的操作同1

    代码如下(每次选取第一个元素作为标志位):

    QuickSort.c文件如下:

    #include "QuickSort.h"
    
    void QuickSort(int R[],int s,int t)//使数据最快的达到目的位置;是随机选择一个数,还是选择第一个数,
                                       //肯定选择第一个操作简单,但是效率不见得高
    {
        int i, j, temp;
        if(s>=t)  //只剩一个数据的时候返回
            return;
        i=s, j=t;
        temp=R[s];
        while(i!=j)
        {
            while((j>i) && (R[j]>temp))//先从后边操作的原因是可以与第一个交换,
                                       //因为第一个数已经保存在temp里了,以此类推,每次交换覆盖的都是垃圾值
             {
                j--;
            }
            if(i<j)
            {
                R[i]=R[j];
                i++;
            }
            while((i<j) && (R[i]<temp))
            {
                i++;
            }
            if(i<j)
                R[j--]=R[i];//先赋值,再自减
        }
        R[i]=temp;//R[j]=temp;也行
        QuickSort(R, s, i-1);
        QuickSort(R, i+1, t);
    }

    QuickSort.h文件如下:

    #ifndef _QUICKSORT_H_
    #define _QUICKSORT_H_
    
    void QuickSort(int f[],int s,int t);
    
    #endif //_QUICKSORT_H_

    Test.c文件如下:

    #include "QuickSort.h"
    #include <stdio.h>
    
    int main()
    {
        int i;
        int nArray[]={1, 3, 2, 9, 4, 7, 8, 2, 7, 4};
        QuickSort(nArray, 0, sizeof(nArray)/sizeof(*nArray)-1);
        
        for(i=0;i<sizeof(nArray)/sizeof(*nArray);i++)
            printf("%d ",nArray[i]);
        return 0;
    }

     Python代码QuickSort.py如下:

    #!/usr/bin/python
    
    def QuickSort(num,s,t):
        if s >= t:
            return
        b = s
        e = t
        temp = num[s]
        while b != e:
            while (b < e) and (num[e] > temp):
                e -= 1
            if b < e:
                num[b]=num[e]
                b+=1
            while (b < e) and (num[b] <  temp):
                b+=1
            if b < e:
               num[e]=num[b]
               e -= 1
        num[b] = temp
        QuickSort(num,s,b-1)
        QuickSort(num,b+1,t)
    
    numbers = [3,1,2,7,0,8,10,-5,9,4]
    print numbers
    QuickSort(numbers,0,len(numbers)-1)
    print numbers
  • 相关阅读:
    解决VS在高DPI下设计出的Winform程序界面变形问题
    ribbon 收起 最小化 导航条 选项卡 navBarControl 隐藏
    Devexpress Ribbon Add Logo
    DevExpress控件使用小结 z
    Devexpress中统一设置字体样式的方法
    微信小程序回到顶部的两种方式
    PHP房贷计算器代码,等额本息,等额本金
    java 时间转换
    spark 编译
    mvn常用命令
  • 原文地址:https://www.cnblogs.com/wufengv5/p/3085647.html
Copyright © 2011-2022 走看看