数据结构--快速、冒泡、选择排序C语言实现
2014-02-21 10:39
274 查看
#include<stdio.h>
//快速排序
void quickSort(int a[],int left,int right)
{
int i,j,temp;
i = left;
j = right;
temp = a[left];
if(left>right)
return;
while(i!=j)
{
while(a[j]>=temp &&j>i)
j--;
if(j>i)
a[i++] = a[j];
while(a[i]<=temp&&j>i)
i++;
if(j>i)
a[j--] = a[i];
}
a[i] = temp;
quickSort(a,left,i-1);
quickSort(a,i+1,right);
}
//冒泡排序
void bubbleSort(int a[],int len)
{
int i,j,temp;
for(i = 0;i<len;i++)
{
for(j = 0;j<len-i-1;j++)
{
if(a[j]>a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1]=a[j];
}
}
}
}
//选择排序算法
void selectSort(int a[],int len)
{
int i,j,temp,min;
for(i = 0;i<len-1;i++)
{
min = i;
for(j = i+1;j<len;j++)
{
if(a[j]<a[min])
min = j;
}
temp = a[min];
a[min] = a[i];
a[i] = temp;
}
}
void main()
{
int i, a[]={2,14,6,3};
int size = sizeof(a)/sizeof(int);
selectSort(a,size);
printf("选择排序之后数组为:\n");
for(i = 0;i<size;i++)
printf("%3d",a[i]);
printf("\n");
quickSort(a,0,size-1);
printf("快速排序之后数组为:\n");
for(i = 0;i<size;i++)
printf("%3d",a[i]);
printf("\n");
bubbleSort(a,size);
printf("冒泡排序之后数组为:\n");
for(i = 0;i<size;i++)
printf("%3d",a[i]);
printf("\n");
}
快速排序:将第一个元素存到临时变量。从最后一个元素依次往前找,直到找到比第一个数小的值,并赋给第一个元素,然后再从第二个元素往后找,直到找到一个比它大的值,赋给它,这也就找到了左边比该值大右边比该值小的所有数。然后递归即可。
冒泡排序:两次for循环,两个相邻的数进行比较,前面的值比后面的大就交换两者数据,直到把最大的值放到最后面,然后在比较除最后一个元素之前的数。比较次数一次减少一个(j<len-i-1)
选择排序:假设第一个元素最小,从第二个元素开始,若比第一个元素小,最第二个元素为最小,依次找到最后,则每次选出最小的放在第一位。
*************************************************************************待续
//快速排序
void quickSort(int a[],int left,int right)
{
int i,j,temp;
i = left;
j = right;
temp = a[left];
if(left>right)
return;
while(i!=j)
{
while(a[j]>=temp &&j>i)
j--;
if(j>i)
a[i++] = a[j];
while(a[i]<=temp&&j>i)
i++;
if(j>i)
a[j--] = a[i];
}
a[i] = temp;
quickSort(a,left,i-1);
quickSort(a,i+1,right);
}
//冒泡排序
void bubbleSort(int a[],int len)
{
int i,j,temp;
for(i = 0;i<len;i++)
{
for(j = 0;j<len-i-1;j++)
{
if(a[j]>a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1]=a[j];
}
}
}
}
//选择排序算法
void selectSort(int a[],int len)
{
int i,j,temp,min;
for(i = 0;i<len-1;i++)
{
min = i;
for(j = i+1;j<len;j++)
{
if(a[j]<a[min])
min = j;
}
temp = a[min];
a[min] = a[i];
a[i] = temp;
}
}
void main()
{
int i, a[]={2,14,6,3};
int size = sizeof(a)/sizeof(int);
selectSort(a,size);
printf("选择排序之后数组为:\n");
for(i = 0;i<size;i++)
printf("%3d",a[i]);
printf("\n");
quickSort(a,0,size-1);
printf("快速排序之后数组为:\n");
for(i = 0;i<size;i++)
printf("%3d",a[i]);
printf("\n");
bubbleSort(a,size);
printf("冒泡排序之后数组为:\n");
for(i = 0;i<size;i++)
printf("%3d",a[i]);
printf("\n");
}
快速排序:将第一个元素存到临时变量。从最后一个元素依次往前找,直到找到比第一个数小的值,并赋给第一个元素,然后再从第二个元素往后找,直到找到一个比它大的值,赋给它,这也就找到了左边比该值大右边比该值小的所有数。然后递归即可。
冒泡排序:两次for循环,两个相邻的数进行比较,前面的值比后面的大就交换两者数据,直到把最大的值放到最后面,然后在比较除最后一个元素之前的数。比较次数一次减少一个(j<len-i-1)
选择排序:假设第一个元素最小,从第二个元素开始,若比第一个元素小,最第二个元素为最小,依次找到最后,则每次选出最小的放在第一位。
*************************************************************************待续
相关文章推荐
- 数据结构和算法——排序算法(冒泡法 选择法 插入法 快速法)实现
- c++实现数据结构中的各种排序方法:直接插入、选择,归并、冒泡、快速、堆排序、shell排序
- (数据结构排序的实验四)快速,冒泡,简单选择,直接插入排序的c语言实现!!
- 常用排序算法的c++实现(冒泡,选择,插入,堆,shell,快速,归并 )与sort()对比 - coder_xia的专栏 - 博客频道 - CSDN.NET
- 数据结构排序,冒泡,快速,直接选择,直接插入,希尔
- Java语言实现九大排序算法(快速、归并、堆、选择、插入、计数、基数、希尔、冒泡)
- 基础排序算法,java实现(快速,冒泡,选择,堆排序,插入)
- 常见排序算法(冒泡,选择,快速)的C语言实现
- 快速、冒泡、选择、直接插入C语言实现
- 算法和数据结构——交换排序(冒泡和快速)
- 【算法与数据结构】冒泡、插入、归并、堆排序、快速排序的Java实现代码
- 数据结构--冒泡、快速排序
- 数据结构-快速排序 java实现
- 排序算法总结(二)-------选择,堆,冒泡,快速,归并排序(java实现)
- 常见排序算法(冒泡,选择,快速)的C语言实现
- 排序算法(冒泡,选择,快速)Java 实现
- 【Javascript】实现快速,选择,冒泡,插入排序
- 【算法系列】——Java实现冒泡&&快速
- 九大排序算法及其实现- 插入.冒泡.选择.归并.快速.堆排序.计数.基数.桶排序.堆排序
- 用objective-c 实现常用算法(冒泡、选择、快速、插入)