快速排序同白话文文章,现将完整代码贴出:
冒泡排序:
#include "iostream"
using namespace std;
//获取数组长度
template <class T>
int getArrayLength(T &array) {
return sizeof(array) / sizeof(array[0]);
}
//输出
void output(int a[], int len) {
for (int i = 0; i < len; i++)
{
cout << a[i] << " ";
}
cout << endl;
}
//两数交换,传引用
void swap(int &a, int &b) {
int temp;
temp = a;
a = b;
b = temp;
}
//冒泡排序
void bubble(int a[], int len) { //每次排序将参与排序的元素最大值放在最后一个
for (int i = 0; i < len; i++)
{
for (int j = 1; j < len-i; j++)
{
if (a[j-1]>a[j])
{
swap(a[j-1],a[j]);
}
}
}
output(a,len);
}
//改进的冒泡排序,只进行一次遍历
void bubble2(int a[], int len) {
int j, k;
bool flag;
k = len;
flag = true;
while (flag)
{
flag = false; //一次遍历过程中,未进行元素的交换,证明序列有序
for (j = 1; j < k; j++)
{
if (a[j-1]>a[j])
{
swap(a[j-1],a[j]);
flag = true;
}
}
k--;
}
output(a,len);
}
void bubble3(int a[], int len) {
int j, k,flag;
flag = len;
while (flag>0)
{
k = flag;
flag = 0;
for (j = 1; j < k; j++)
{
if (a[j-1]>a[j])
{
swap(a[j - 1], a[j]);
flag = j;
}
}
}
output(a,len);
}
快速排序:
quickSort.h
void quickSort1(int a[], int l,int r) {
if (l<r)
{
int i = l, j = r, x = a[l];
while (i<j)
{
while (i<j&&a[j]>=x)
{
j--;
}
if (i<j)
{
a[i++] = a[j];
}
while (i<j&&a[i]<x)
{
i++;
}
if (i<j)
{
a[j--] = a[i];
}
}
a[j] = x;
quickSort1(a, l, i - 1);
quickSort1(a, i + 1, r);
}
}
主函数:
#include "stdafx.h"
#include "bubbleSort.h"
#include "quickSort.h"
int main()
{
int a[6] = {3,2,1,5,6,323};
int len;
len = getArrayLength(a);
//bubble(a,len);
//bubble2(a, len);
//bubble3(a,len);
quickSort1(a, 0, len-1);
output(a,len);
system("pause");
return 0;
}