Chinaunix首页 | 论坛 | 博客
  • 博客访问: 586058
  • 博文数量: 165
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1554
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-23 22:57
个人简介

我本仁慈,奈何苍天不许

文章分类

全部博文(165)

文章存档

2018年(1)

2016年(33)

2015年(5)

2014年(34)

2013年(92)

分类: LINUX

2013-10-23 23:07:56

 

数组的直接插入排序和快速排序(适用于链表)

1、直接插入排序:算法思路:设一个数组(a0.........an,把第二个值(a1)赋值给一个中间变量temp,然后第一个值(a0)与中间变量temp相比,若小于中间变量则把第一个值(a0)赋值给第二个变量,知道第二层循环的j < 0,然后把中间变量temp赋值给a[j + 1];第二次把a[2]赋值给中间变量temp,然后依次和中间变量temp相比,若小于中间变量,则把该值赋值给它的后面一个(a[ j + 1]),直到 j < 0,然后把中间变量赋值给a[ j + 1];。。。。。。。。依次这样循环,直到第一层循环结束。

2、快速排序法:算法思路:设记录的Key集合K = {50 36 66 76 36 12 25 95},每次以集合的第一个Key为基准相比较,把数组a传以及其中的low(最开始传的是0)和high(数组的最大值减1)传给被调函数,然后把a[low]赋值给中间变量temp?之后先从右边的值与中间变量相比较,直到右边的某个值a[ j ]小于中间变量,然后在把这个值赋值给a[ i ]?然后再从左到右一次与中间变量temp相比较,直到某个值大于中间变量,再把a[ i ]赋值给a[ j ],再回到?。。。。。这样一次循环,直到i  <  j。然后在分别递归调用中间变量左边和右边的那些数。

#include "stdio.h"

#define MAXSIZE 10

/*直接插入排序*/

void insert_sort(int *a, int len)

{

       int temp;

       int i, j;

       for(i=1; i

       {

              temp = a[i];

              for(j=i-1; temp=0; j--)

              {

                     a[j+1] = a[j];

              }

              a[j+1] = temp;

       }

}

/*快速排序*/

void quick_sort(int *a, int low, int high)

{

       int i = low, j = high;

       int temp;

       if(i < j)//这个if判断用于递归结束

       {

              temp = a[low];

              while(i < j)   //这个while循环是第一次把小于a[low]的数放在左边,把大于a[high]的数放在右边

              {

                     while(i

                            j--;

                     if(i

                            a[i] = a[j];

                     while(i=a[i])

                            i++;

                     if(i

                            a[j] = a[i];

              }   

              a[i] = temp;//这里就是相当与分界线                 

              quick_sort(a,low,i-1);//利用递归的思想把a[low]左边的数再排序,直到i = j

              quick_sort(a,i+1,high);//利用递归的思想把a[low]右边的数再排序,直到i = j

       }

}

int len(int *data)

{

       int sum = 0;

       while(*data++)

       {

              sum++;

       }

       return sum;

}

void display(int *data, int len)

{

       int i;

       for(i = 0; i < len; i++)

       {

              printf("%d  ",*data++);

       }

       putchar('\n');

}

int main()

{

       int data[MAXSIZE] = {2,5,3,6,9,1,7};

       display(data,len(data));

       insert_sort(data, len(data));//这里是按照直接插入排序的方式在排序

       //quick_sort(data,0,len(data)-1);//这里是按照快速排序的方式在排序

       display(data,len(data));

       return 0;

}

阅读(1043) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~