算法——交换排序

来源:互联网 发布:php 接口开发安全性 编辑:程序博客网 时间:2024/05/22 23:28

    交换排序:通过两两交换,最终按照一定的顺序把记录排好。先来看下冒泡排序,相信大家都不陌生。


先说下自己的学习冒泡的历程:虽然学习计算机两年了,但是对冒泡排序还不是很熟,所以,刚开始的时候就举出了两个数来进行冒泡排序,然后自己再往外面加了循环,再通过测试,分析,写出了下面的程序。

<span style="font-family:KaiTi_GB2312;font-size:18px;">int main(){     int array[10000],i,j,temp;    for (i=0;i<10000;i++)    {        array[i]=i;    }    //核心代码    for(i=0;i<10000;i++)    {        for(j=9999;j>i;j--)            if(array[j]>array[j-1])            {                temp=array[j];                array[j]=array[j-1];                array[j-1]=temp;            }    }    //核心代码    for (i=0;i<10000;i++)    {        printf("%d,",array[i]);    }}</span>

    冒泡排序完事了,再来快速排序。在学习快速排序时,对自己来说还是有一定难度的,尤其是在找递归的边界值的时候,走了大弯路了。

总结:快速排序两个难点:核心代码,如何对数组进行排序,有两种:双边扫描和单边扫描

<span style="font-family:KaiTi_GB2312;font-size:18px;">#include <stdio.h>#include <stdlib.h>//核心代码int centralCode(int array[],int low,int high){    int temp = array[low];    while(low<high)    {        if( low<high && temp>=array[high])            high--;        array[low]=array[high];        if(low<high && temp<=array[low+1])            low++;        array[high]=array[low];    }    array[low]=temp;    return high;}//递归调用核心代码void sort (int array[],int low ,int high){    if(low<high)  //递归的边界值:当数组只有一个元素时,也就是说最左和最右相等。    {        int temp;        temp=centralCode(array,low,high);        sort(array,low,temp-1);        sort(array,temp+1,high);    }}int main(){    int array[10000],i,j,temp;    for (i=0;i<10000;i++)    {        array[i]=i;    }    //开始排序    sort(array,0,9999);    //输出    for (i=0;i<10000;i++)    {        printf("%d,",array[i]);    }}</span>

     还望大家多多指点。

    


0 0