现在有数组{ 3, 6, 2, 1, 9, 5, 4, 7 }; 然后用快速排序法把他们排序

1、首先 ,取出3作为比较数据

2、从最右边往左边比较找到第一个比3小的数据,把3在数组中的位置赋值为那个数,这里向左循环到1时,1<3 把1复制到数组的第一个位置,记录此时1的位置,作为下一个填充数据的位置

3、再用3从左向右比较数据,找到第一个比3大的数据,这里是6,把6赋值给从右边比较时1的位置

4、从“1”的位置重复2,3步骤,直到从左边比较时索引 大于等于 从右边比较时的索引结束本次循环 数组变为 1 2 3 6 9 5 4 7

5、第二轮循环,从“3” 位置开始 数组的2索引,经过第一轮分别循环,数组"3"左边的数都比"3"小,右边的数都比“3”大, 数组 1,2 ; 6,9,5,4,7用1,2,3,4步骤再次循环

6、重复上述步骤,下面贴代码

       private void quick_sort1(int[] s, int l, int j)
        {
            if(l<j)
            {
                int i = test1(s, l, j);
                quick_sort1(s, l, i - );
                quick_sort1(s, i+, j);
            }
        }
        private int test1(int []list,int i_start,int i_end)
        {
            int i_Now = list[i_start];//取出第一个比较数
            int i_front =i_start; //保存从左边遍历的位置
            int i_brak = i_end;   //保存从右边遍历的位置
            ; ii < i_end; ii++)
            {
                for (int i = i_brak; i > i_front; i--)  //从最右边开始遍历,满足循环到的数大于i_Now(取出的数),比较向左边移动
                {
                    if (list[i] < i_Now && i >= i_front)//当遍历到的数小于i_Now(比较数)并且当前位置大于左边遍历的位置
                    {
                        list[i_front] = list[i];         //把此时的遍历到的数填充到i_Now的位置,这时数组为 1 6 2 1 9 5 4 7 ,(取出来i_Now为3,位置为数组的索引一)
                        i_brak = i;                      //这时需要填充的新的数字的位置为最开始1的位置,也就是数组索引3的位置
                        i_front++;                       //给左边遍历的位置加一,因为数组第一个位置现在有数字了
                        break;
                    }
                    else
                    {
                        continue;
                    }
                }
                for (int j = i_front; j <= i_brak; j++)  //从右边遍历结束后再从左边开始遍历,使用的数字依旧为i_Now,此时需要填充的位置为数组索引3的位置
                {                                        //从左边数值找到大于i_Now并且索引位置小于第一从从右边循环结束的位置 也就是数组索引为3的位置
                    if (list[j] > i_Now && i_brak > j)
                    {
                        list[i_brak] = list[j];         //将此时遍历到的数填充到第一次遍历移动数字的初始位置,也就是数组索引为3的位置
                        i_front = j;                    //此时数组为 1 6 2 6 9 5 4 7
                        i_brak--;                       //给右边遍历的位置减一,因为数组第i_brak个位置现在有数字了
                        break;
                    }
                    else
                    {
                        continue;
                    }
                }
            }                                            // ==》 重复上面的步骤  先从右往左找 数组变为 1 2 2 6 9 5 4 7,从左往右找时发现i_front >=i_brak
            list[i_front] = i_Now;                       //这时把最初拿出来的i_Now填充到最后i_font的位置 也就是数组索引2的位置,数组变为1 2 3 6 9 5 4 7
            ; i < list.Length; i++)        //==》经过第一轮遍历会发现“3”(i_Now)左边的数 都小于3 ,右边的数都大于3 然后继续调用排序方法
            {                                            //这时遍历分别遍历"3"两边的数组 ==>int i = test1(s, l, j);quick_sort1(s, l, i - 1);quick_sort1(s, i + 1, j); i为初始数据填充数组的位置
                textBox1.Text += list[i].ToString();
                textBox1.Text += ",";
            }
            textBox1.Text += "\r\n";
            return i_front;
        }

用个按钮触发下

        private void button1_Click(object sender, EventArgs e)
        {
            ] { , , , , , , ,  };
            quick_sort1(list, , );

        }

就这样了 ~~~~~刚刚开始接触,研究算法的菜鸟一枚,欢迎大家帮我指正错误,欢迎共同讨论、、

C#实现快速排序法的更多相关文章

  1. PHP两种基础的算法:冒泡、快速排序法》》》望能够帮助到大家

    首先扯个淡@@@@@@@@@ 算法是程序的核心,一个程序的好坏关键是这个程序算法的优劣. 冒泡排序法 原理:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的 ...

  2. Java演算法之快速排序法

    1 * 快速排序法(Quick Sort),遞迴版本. 2 * 3 * @param array 傳入要排序的陣列 4 * @param start 傳入要排序的開始位置 5 * @param end ...

  3. javascript的快速排序法

    在排序方式中,快速是比较普遍使用的,因为其速度快. 因为其是不断的递归,而且是根据基准点的左右两边开始递归,直到数组只有一个值的时候才返回. 这个基准点是自己定的. 一般取中间,比较好理解. < ...

  4. php四种基础算法:冒泡,选择,插入和快速排序法

    转自:http://www.php100.com/html/php/rumen/2013/1029/6333.html 许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣.作为一 ...

  5. 快速排序法QuickSort

    /** * * @author Administrator * 功能:交换式排序之快速排序 */ package com.test1; import java.util.Calendar; publi ...

  6. C#快速排序法

    最近面试的时候,被问到了快速排序法.一时之间,无法想起算法来. 重新看了书本,算法如下: 1)设置两个变量I.J,排序开始的时候:I=0,J=N-1: 2)以第一个数组元素作为关键数据,赋值给key, ...

  7. c/c++ 算法之快速排序法 冒泡排序法,选择排序法,插入排序法

    本文详细叙述和实现了快速排序算法,冒泡排序 选择排序 插入排序比较简单,原理在这里不再详述,直接用代码进行了实现. 快速排序法(quicksort)是目前所公认最快的排序方法之一(视解题的对象而定), ...

  8. php 四种基础算法 ---- 快速排序法

    4.快速排序法 代码: function quick_sort($arr) {    //先判断是否需要继续进行    $length = count($arr);    if($length < ...

  9. C语言实现快速排序法(分治法)

    title: 快速排序法(quick sort) tags: 分治法(divide and conquer method) grammar_cjkRuby: true --- 算法原理 分治法的基本思 ...

随机推荐

  1. volatile,可变参数,memset,内联函数,宽字符窄字符,国际化,条件编译,预处理命令,define中##和#的区别,文件缓冲,位域

    1.volatile: 要求参数修改每次都从内存中的读取.这种情况要比普通运行的变量需要的时间长. 当设置了成按照C99标准运行之后,使用volatile变量之后的程序运行的时间将比register的 ...

  2. Hibernate学习笔记(四)关系映射之一对一关联映射

    一. 一对一关联映射 ²        两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ²        有两种策略可以实现一对一的关联映射 Ø        主键关联:即让 ...

  3. HDU-4681 String 枚举+DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681 题意:给A,B,C三个串,求一个最长的串D,满足D是A和B的subsequence,C是D的su ...

  4. [Tutorial] Using the RasPi as a WiFi hostspot

    http://www.raspberrypi.org/forums/viewtopic.php?f=36&t=19120 http://wireless.kernel.org/en/users ...

  5. jad的用法(反编译某目录下所有class)

    jad -s java -d E:\scm\MonitorServerEx\src2 -o -ff -r E:\scm\MonitorServerEx\classes-recomp\**\*.clas ...

  6. hdfs里的文件下载HDFS之fsimage、metadata、edits、fstime(二十七)

    首先,要有这个观念,元数据信息(fsimage + editslog). fsimage是在磁盘 metadata是在内存 ********************fsimage把内存的,序列化到磁盘 ...

  7. A Tour of Go Advanced Exercise: Complex cube roots

    Let's explore Go's built-in support for complex numbers via the complex64 and complex128 types. For ...

  8. 爬去知乎百万用户信息之UserTask

    UserTask是获取用户信息的爬虫模块 public class UserManage { private string html; private string url_token; } 构造函数 ...

  9. 如何创建一个有System用户权限的命令行

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何创建一个有System用户权限的命令行.

  10. HBase在京东的完善与创新

    随着大数据处理时代的到来,NoSQL风生水起.京东作为国内最大的综合网络零售商,随着业务数据量爆发式增长,传统的关系数据库在海量数据面前开始显得捉襟见肘,于是京东云平台在Hadoop生态集群经验积累的 ...