冒泡排序和快速排序
文章目录:
- 冒泡排序
- 快速排序
1.冒泡排序
1.思想
2.执行过程和核心代码
3.具体代码
#include<stdio.h>
void bufflesort(int a[],int n)
{
int i,temp;//temp为临时变量
int count1=0,count2=0; //count1为排序次数计数器,count2为总比较次数
for(i=0;i<n-1;i++)//要进行n-1趟排序
{
count1++;//进行完一趟冒泡排序,计数器就加1
//int flag=0;
//每次进行完一趟冒泡排序时,就已经有有个在正确的位置上了,所以每趟排序完都要减少一个元素 再对剩余元素进行比较
for(int j=0;j<n-i-1;j++)
{
if(a[j]>a[j+1])//如果遇到比当前元素小的,则这两个元素位置互换
{
count2++;//如果发生交换,则计数器加1
temp=a[j];//交换操作
a[j]=a[j+1];
a[j+1]=temp;
// flag=1;
}
}
/*if(flag==0)
{
return ;
}*/
}
for(i=0;i<n;i++)//都比较完之后打印输出
{
printf("%5d",a[i]);
}
printf("排序次数为:%d,比较次数为:%d",count1,count2);
}
int main()
{
int a[]={96,57,68,35,25,17};
bufflesort(a,6);
return 0;
}
2.快速排序
1.思想(选取轴点)
2.执行过程
3.核心代码
4时间复杂度和空间复杂度
5.具体代码
#include <stdio.h>
#include <stdlib.h>
#define BUF_SIZE 10
/**************************************************
*函数名:display
*作用:打印数组元素
*参数:array - 打印的数组,maxlen - 数组元素个数
*返回值:无
**************************************************/
void display(int array[], int maxlen)
{
int i;
for(i = 0; i < maxlen; i++)
{
printf("%-3d", array[i]);
}
printf("\n");
return ;
}
/************************************
*函数名:QuickSort
*作用:快速排序算法
*参数:
*返回值:无
************************************/
void QuickSort(int *arr, int low, int high)
{
if (low < high)
{
int i = low;
int j = high;
int k = arr[low];
while (i < j)
{
while(i < j && arr[j] >= k) // 从右向左找第一个小于k的数
{
j--;
}
if(i < j)
{
arr[i++] = arr[j];
}
while(i < j && arr[i] < k) // 从左向右找第一个大于等于k的数
{
i++;
}
if(i < j)
{
arr[j--] = arr[i];
}
}
arr[i] = k;
// 递归调用
QuickSort(arr, low, i - 1); // 排序k左边
QuickSort(arr, i + 1, high); // 排序k右边
}
}
// 主函数
int main()
{
int array[BUF_SIZE] = {12,85,25,16,34,23,49,95,17,61};
int maxlen = BUF_SIZE;
printf("排序前的数组\n");
display(array, maxlen);
QuickSort(array, 0, maxlen-1); // 快速排序
printf("排序后的数组\n");
display(array, maxlen);
return 0;
}
之后会更新选择类排序的算法。2020.8.8.