十大排序实现
#include<iostream>
using namespace std;
void BubbleSort(int length, int array[]);
void SelectSort(int length, int array[]);
void InsertSort(int length, int array[]);
void ShellSort(int length, int array[]);
void MergeSort(int length, int array[]);
void QuickSort( int begin,int end,int array[]);
void Swap(int i, int j, int array[]);
int Partition(int begin, int end, int array[]);
void CountSort(int length, int array[]);
void BucketSort(int length, int array[]);
void RadixSort(int length, int array[]);
int main() {
int array[6] = { 2,9,1,5,3,6 };
cout << "排序前";
for (int i = 0; i < 6; i++)
{
cout << array[i]<<",";
}
cout << endl;
QuickSort(0, 5, array);
cout << "排序后";
for (int i = 0; i < 6; i++)
{
cout << array[i] << ",";
}
system("pause");
return 0;
}
void BubbleSort(int length, int array[])
{
for (int i = 0; i < length; i++)
{
bool flag = true;
for (int j = 0; j < length-i-1; j++)
{
if (array[j] > array[j + 1])
{
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
flag = false;
}
}
if (flag)
return;
}
}
void SelectSort(int length,int array[]) {
for (int i = 0; i < length-1; i++) {
int minindex =i;
for (int j = minindex; j < length - 1; j++) {
if (array[minindex] > array[j + 1]) {
minindex = j + 1;
}
}
int temp = array[i];
array[i] = array[minindex];
array[minindex] = temp;
}
}
void InsertSort(int length, int array[])
{
int current;
for (int i = 0; i < length-1; i++)
{
current = array[i + 1];
int preindex = i;
while (preindex>=0 && array[preindex]> current)
{
array[preindex + 1] = array[preindex];
preindex--;
}
array[preindex+1] = current;
}
}
void ShellSort(int length,int array[])
{
int temp, gap = length / 2;
while (gap>0)
{
for (int i = gap; i < length; i++)
{
temp = array[i];
int preIndex = i - gap;
while (preIndex>=0&& array[preIndex]>temp)
{
array[preIndex + gap] = array[preIndex];
preIndex -= gap;
}
array[preIndex + gap] = temp;
}
gap /= 2;
}
}
void Swap(int i, int j, int array[])
{
int temp;
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
void QuickSort(int begin, int end, int array[])
{
if (begin<end)
{
int mid = Partition(begin, end, array);
QuickSort(begin, mid-1, array);
QuickSort(mid + 1,end, array);
}
}
int Partition(int begin, int end, int array[])
{
int pivot = array[begin];
int sp = begin + 1;
int bigger = end;
while (sp<=bigger)
{
if (array[sp] > pivot)
{
Swap(sp,bigger,array);
bigger--;
}
else
{
sp++;
}
}
Swap(begin, bigger, array);
return bigger;
}