Test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "SwapSort.h"
void TestBubbleSort()
{
int arr[] = { 9, 1, 2, 5, 7, 4, 8, 6, 3, 5 };
int sz= sizeof(arr) / sizeof(arr[0]);
BubbleSort(arr,sz);
PrintArray(arr,sz);
}
void TestQuickSort()
{
int arr[] = { 9, 1, 2, 5, 7, 4, 8, 6, 3, 5 };
int sz = sizeof(arr) / sizeof(arr[0]);
QuickSort(arr, 0,sz-1);
PrintArray(arr, sz);
}
int main()
{
TestQuickSort();
return 0;
}
SwapSort.h
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
void PrintArray(int* a,int n);
void BubbleSort(int* a,int n);
void QuickSort(int* a,int begin,int end);
SwapSort.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "SwapSort.h"
void PrintArray(int* a, int n)
{
for (int i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
void Swap(int* a,int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
void BubbleSort(int* a, int n)
{
assert(a);
for (int j=0;j<n;j++)
{
for (int i = 0; i < n - 1-j; i++)
{
if (a[i] > a[i + 1])
{
Swap(&a[i], &a[i + 1]);
}
}
}
}
int PartSort1(int* a, int begin, int end)
{
int left = begin, right = end;
int keyi = left;
while (left < right)
{
while (left < right && a[right] >= a[keyi])
{
right--;
}
while (left < right && a[left] <= a[keyi])
{
left++;
}
Swap(&a[left], &a[right]);
}
Swap(&a[keyi], &a[left]);
keyi = left;
}
int PartSort2(int* a, int begin, int end)
{
int keyi = begin;
int piti = begin;
while (begin<end)
{
while (begin<end && a[end]>=a[keyi])
{
end--;
}
a[piti] = a[end];
piti = end;
while (begin<end && a[begin]<=a[keyi])
{
begin++;
}
a[piti] = a[begin];
piti = begin;
}
a[piti] = a[keyi];
return piti;
}
int PartSort3(int* a, int begin, int end)
{
int prev = begin;
int cur = begin + 1;
int keyi = begin;
while (cur<=end)
{
if (a[cur]<a[keyi])
{
prev++;
Swap(&a[prev], &a[cur]);
}
cur++;
}
Swap(&a[prev],&a[keyi]);
keyi = prev;
return keyi;
}
void QuickSort(int* a, int begin,int end)
{
if (begin>=end)
{
return;
}
int keyi = PartSort2(a, begin, end);
QuickSort(a,begin,keyi-1);
QuickSort(a,keyi+1,end);
}