快速排列初识

来源:互联网 发布:nginx lua 开发环境 编辑:程序博客网 时间:2024/05/19 10:39

快速排列的思想很牛逼

//来一个快速排序。#include<stdio.h>void sort (int *a,int left,int right){    if (left >= right){             //如果左边索引大于等于右边的索引就代表已经整理完成了一个组了        return;    }    int i = left;    int j = right;    int key = a[left];    while (i < j){                  //控制在当组内寻找一遍        while (i < j&&key <= a[j]){ //而寻找的条件就是1.找个小于或者大于key的数(大于或小于取决于是            j--;                        //升序还是降序)2.没有符合条件1的,并且i与j的大小没有反转;        }                           //j -- 表示向前寻找        a[i] = a[j];                //当找到了这样一个数的时候就把他赋给了前面被拿走的i的值                                        //如果是第一次循环且key是a[left],那么就是给key        while (i < j&&key >= a[i]){ //这是i在当前组内向前寻找,同上,不过左右两边的数大小与key的关系相反。排序的思想主要是把数往两边扔            i ++;        }        a[j] = a[i];    }    a[i] = key;                     //当在当前组内找完一遍时,就把中间数key回归    sort(a,left,i-1);               //最后用同样的方式对左边分出来的小组进行同上的做法    sort(a,i+1,right);              //最后用同样的方式对右边分出来的小组进行同上的做法                                        //当然最后可能会出现很多的左右,直到每一组的i=j为止}int main(){    int a[10] = {9,8,7,6,5,4,3,2,1,0};    sort(a,0,9);    int i;    for (i = 0;i < 10;i ++)        printf("%d",a[i]);    return 0;}

原创粉丝点击