#include <stdio.h>
void bubble_sort(int *array,int len)
{
int i,j,tmp;
for(i = 0; i < len; i++)
{
for(j = 0; j < len - i - 1; j++)
{
if(array[j] > array[j + 1])
{
tmp = array[j];
array[j] = array[j + 1];
array[j + 1] = tmp;
}
}
}
}
void select_sort(int *array,int len)
{
int i,j,k,tmp;
for(i = 0; i < len - 1; i++)
{
k = i;//(k中保存i中的值)
for(j = i + 1; j < len; j++)
{
if(array[k] < array[j])
{
k = j;//k中始终保存较小的元素的下标
}
}//内重for循环结束
if(k != i)//如果执行if,说明前面的if成立过,则交换
{
tmp = array[i];
array[i] = array[k];
array[k] = tmp;
}
}
}
void quicksort(int *array,int start,int end)
{
int i = 0;
int length = end - start + 1;
if(start < end)
{
int buf[100];
int k = start;
int m = end;
int pivot = array[start];//选取定标
for(i = 0; i < length; i++)
{
buf[i] = array[start + i];
}//拷贝原数组
for(i = 1; i < length; i++)//放元素
{
if(pivot < buf[i])//如果比定标大,放在定标的右边
{
array[m] = buf[i];
m--;//自右向左放置
}
else
{
array[k] = buf[i];//如果比定标小,放在定标的左边
k++;
}
}
array[m] = pivot;//放定标
quicksort(array,start,k - 1);//递归调用
quicksort(array,k + 1,end);
}
}
void print(int *array,int len)
{
int i;
for(i = 0; i < len - 1; i++)
printf("%d ",array[i]);
printf("%d\n",array[len - 1]);
}
int main(void)
{
int array[] = {1,25,10,14,35,11,89,45,5};
int len = sizeof(array)/sizeof(array[0]);
printf("********bubble sort*************\n");
bubble_sort(array,len);
print(array,len);
printf("********select sort*************\n");
select_sort(array,len);
print(array,len);
printf("********quick sort*************\n");
quicksort(array,0,len);
print(array,len);
return 0;
}
三大排序算法实现(冒泡,选择,快排)
最新推荐文章于 2023-02-05 20:31:13 发布