关于排序算法的整理

       冒泡排序:
把第一个元依次与后面的元素比较,若大于后面的元素,2树交换位置,继续和后面的元素比较。此为一次比较过程,重复此过程。


#include <stdio.h>
int main()
{
     int a[11],i,j,t;
     printf("Input 10 numbers:\n");
     for(i=1;i<11;i++)
        scanf("%d",&a[i]);
    printf("\n");
    for(j=1;j<=9;j++)
          for(i=1;i<=10-j;i++)//排序时第一次比较9次,第二次比较8次...只需比较9次即可 if(a[i]>a[i+1])
          {          
               t=a[i];
               a[i]=a[i+1];
               a[i+1]=t;
         }
     printf("The sorted numbers:\n");
     for(i=1;i<11;i++)
        printf("%d ",a[i]);
}

    快速排序:
        (1)从high指向的记录开始,向前找到第一个关键字值小于pivotkey的记录,将其放到low指向 的位置;      
        (2)从low指向的记录开始,向后找到第一个关键字的值大于pivotkey的记录,将其放到high指向的位置;      
重复 (1)、(2)直到low=high,将pivotkey放在low(high)指向的位置,这样就完成了一次排序的过程。
        (3)分别对(0,low-1),(low+1,high)的元素继续进行快速排序。
光看解释不好理解,先上一张排序的图解
prvotkey       3        4        2        5        1              初始时,一般选择第一个元素即3为关键元素
     3            low                                   high
                 1        4        2          5        1    第一次排序时,high指向的元素比关键元素小,把low覆盖,high位置不变,++low
                          low                          high
                  1        4        2          5        4            第二次排序时,low指向的元素比关键元素大,把high覆盖,--high
                              low                high
                  1        2       2           5        4        第三次排序,high指向5大于3,--high,指向2小于3,覆盖low,low++
                                  low(high)
                  1        2       3            5       4        low和high相等,把关键元素(prvotkey)覆盖low(high)第一趟排序结束。
经过一趟排序,关键元素(3)就找到他再这些元素所在的位置,不断递归调用,就能实现排序,使用与n数值较大的场合。

 
#include <stdio.h>
int partions(int l[],int low,int high)  {    int prvotkey=l[low];    l[0]=l[low];    while (low<high)      {      while (low<high&&l[high]>=prvotkey)         --high;         l[low]=l[high];      while (low<high&&l[low]<=prvotkey)          ++low;          l[high]=l[low];       }
    l[low]=l[0];     return low;   }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值