快速排序和冒泡排序
Posted Fgxr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序和冒泡排序相关的知识,希望对你有一定的参考价值。
记录枯燥的生活,啊哈哈哈哈哈 -_-。。。
工具函数
void swap(int *a,int *b){
int temp = *a;
*a = *b;
*b = temp;
}
冒泡
void bubble(int array[], int len)
{
for (int j = 0; j < len; j++)
{
int count = 0;
for (int i = 1; i < len - j; i++)
{
if (array[i - 1] > array[i])
{
swap(array + i - 1, array + i);
count++;
}
}
if (!count)
break;
}
}
快排
void quick(int array[], int len)
{
int i = 0;
int j = len - 1;
int flag = 0;
int key = array[0]; // 不恰当的选择方法
while (i != j)
{
while (j > i)
{
if (flag ? array[i] > key : array[j] < key)
{
swap(array + i, array + j);
break;
}
flag ? i++ : j--;
}
flag = !flag;
}
if (i > 1)
quick(array, i);
if (i < len - 2)
quick(array + i + 1, len - 1 - i);
}
最终的测试和结果
#include<stdio.h>
#include<stdlib.h> //冒泡和快排
void swap(int *a,int *b){
int temp = *a;
*a = *b;
*b = temp;
}
void quick(int array[], int len)
{
int i = 0;
int j = len - 1;
int flag = 0;
int key = array[0]; // 不恰当的选择方法
while (i != j)
{
while (j > i)
{
if (flag ? array[i] > key : array[j] < key)
{
swap(array + i, array + j);
break;
}
flag ? i++ : j--;
}
flag = !flag;
}
if (i > 1)
quick(array, i);
if (i < len - 2)
quick(array + i + 1, len - 1 - i);
}
void bubble(int array[], int len)
{
for (int j = 0; j < len; j++)
{
int count = 0;
for (int i = 1; i < len - j; i++)
{
if (array[i - 1] > array[i])
{
swap(array + i - 1, array + i);
count++;
}
}
if (!count)
break;
}
}
int main(void)
{
//定义数据
// int array[] = {55, 40, 18, 39, 20, 90, 99, 80, 16, 38, 0};
// int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int array[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
int len = 10;
//排序
bubble(array, len);
//quick(array, len);
//输出
for (int i = 0; i < len; i++)
printf("%d ", array[i]);
printf("\\n");
return 0;
}
结果为:0 1 2 3 4 5 6 7 8 9
以上是关于快速排序和冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章