c语言的简单排序:选择排序和冒泡排序及他们的优化
2018-01-23 10:13
344 查看
排序的算法多种多样,在c语言阶段接触较多的是冒泡和选择,下面就给出两种排序的实现。
(1)、冒泡排序:
# include<stdio.h>
void main()
{
int arr[]={11,88,66,22,77,55,44,99,33};
int len=sizeof(arr)/sizeof(arr[0]);
for(int i=0;i<len-1;i++)
{
for(int j=0;j<len-i-1;j++)
{
if(arr[j]>arr[j+1])
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(int i=0;i<len;i++)
{
printf("%5d",arr[i]);
}
}
优化版本:
# include<stdio.h>
void main()
{
int arr[]={10,1,2,3,4,5,6,7,8,9};//对于一些特殊的情况可减少循环次数
int count=0;//循环次数计数器
int len=sizeof(arr)/sizeof(arr[0]);
bool flag=0;//标识符
for(int i=0;i<len-1;i++)
{
flag=0;
for(int j=0;j<len-i-1;j++)
{
count++;
if(arr[j]>arr[j+1])
{
flag=1;//进入标识符值改变
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
if(flag==0)
{
break;
}
}
for(int i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
printf("%d\n",count);
}
(2)、选择排序:
# include<stdio.h>
void main()
{
int arr[]={11,88,66,22,77,55,44,99,33};
int len=sizeof(arr)/sizeof(arr[0]);
for(int i=0;i<len-1;i++)
{
for(int j=i+1;j<len;j++)
{
if(arr[i]>arr[j])
{
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
for(int i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
}
优化版本:改用每趟都找到该趟的最小值从而减少比较的次数。
# include<stdio.h>
void main()
{
int arr[]={11,88,66,22,77,55,44,99,33};
int len=sizeof(arr)/sizeof(arr[0]);
int min,min_index=0;
for(int i=0;i<len-1;i++)
{
min=arr[i];
for(int j=i+1;j<len;j++)
{
if(min>arr[j])
{
min=arr[j];
min_index=j;
}
}
if(min_index!=i)
{
int temp=arr[i];
arr[i]=arr[min_index];
arr[min_index]=temp;
}
}
for(int i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
}
(1)、冒泡排序:
# include<stdio.h>
void main()
{
int arr[]={11,88,66,22,77,55,44,99,33};
int len=sizeof(arr)/sizeof(arr[0]);
for(int i=0;i<len-1;i++)
{
for(int j=0;j<len-i-1;j++)
{
if(arr[j]>arr[j+1])
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(int i=0;i<len;i++)
{
printf("%5d",arr[i]);
}
}
优化版本:
# include<stdio.h>
void main()
{
int arr[]={10,1,2,3,4,5,6,7,8,9};//对于一些特殊的情况可减少循环次数
int count=0;//循环次数计数器
int len=sizeof(arr)/sizeof(arr[0]);
bool flag=0;//标识符
for(int i=0;i<len-1;i++)
{
flag=0;
for(int j=0;j<len-i-1;j++)
{
count++;
if(arr[j]>arr[j+1])
{
flag=1;//进入标识符值改变
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
if(flag==0)
{
break;
}
}
for(int i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
printf("%d\n",count);
}
(2)、选择排序:
# include<stdio.h>
void main()
{
int arr[]={11,88,66,22,77,55,44,99,33};
int len=sizeof(arr)/sizeof(arr[0]);
for(int i=0;i<len-1;i++)
{
for(int j=i+1;j<len;j++)
{
if(arr[i]>arr[j])
{
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
for(int i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
}
优化版本:改用每趟都找到该趟的最小值从而减少比较的次数。
# include<stdio.h>
void main()
{
int arr[]={11,88,66,22,77,55,44,99,33};
int len=sizeof(arr)/sizeof(arr[0]);
int min,min_index=0;
for(int i=0;i<len-1;i++)
{
min=arr[i];
for(int j=i+1;j<len;j++)
{
if(min>arr[j])
{
min=arr[j];
min_index=j;
}
}
if(min_index!=i)
{
int temp=arr[i];
arr[i]=arr[min_index];
arr[min_index]=temp;
}
}
for(int i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
}
相关文章推荐
- C语言:两种简单的排序及其应用(选择排序和冒泡排序)
- 三种最简单基础的排序 选择排序 冒泡排序 直接插入排序 运用了函数指针数组
- 简单的C语言选择排序实现代码
- C语言常用的几种排序算法代码(选择排序,冒泡排序,插入排序,快速排序)
- 【C语言】冒泡排序,选择排序,插入排序
- C语言之桶排序,冒泡排序,快速排序,选择排序算法学习
- 简单的排序算法——插入排序,选择排序,交换排序(冒泡排序,快速排序)
- 冒泡排序,插入排序,选择排序和快速排序-C语言
- C语言之冒泡排序、选择排序
- 数据结构之排序算法一冒泡排序,直接插入排序,简单选择排序
- 选择排序和冒泡排序区别以及冒泡排序优化
- 三个简单、基本的排序算法---插入排序、选择排序、冒泡排序
- c语言排序之冒泡排序,选择排序,插入排序,快速排序总结
- 排序【7】之简单选择排序的C语言实现
- C语言:使用冒泡排序,排序多个字符串(优化)。
- 简单算法--冒泡排序、快速排序、选择排序及二分法
- 三种简单排序用java实现(选择排序,冒泡排序,插入排序)
- (c语言)选择排序与冒泡排序
- c语言实现 选择排序 冒泡排序
- C语言实现选择排序、直接插入排序、冒泡排序的示例