插入排序
#include <iostream>
using std::cout;
using std::endl;
void printArr(int arr[], int n)
{
for (int i = 0; i < n; i++)
{
cout << arr[i] << "\t";
}
cout << endl;
}
void insert_sort(int arr[], int n)
{
printArr(arr, n);
for (int i = 1; i < n; i++)
{
if (arr[i] < arr[i - 1])
{
cout << "arr[" << i << "] < "
<< "arr[" << i - 1 << "] " << endl;
int tmp = arr[i];
int j = i;
for (j = i; j >= 1; j--)
{
cout << "j: " << j << " arr[j-1]: " << arr[j - 1] << " "
<< "tmp: " << tmp << endl;
if (arr[j - 1] > tmp)
{
arr[j] = arr[j - 1];
cout << "移动"
<< "arr[" << j + 1 << "]" << endl;
}
else
{
break;
}
}
if (j != i)
{
arr[j] = tmp;
printArr(arr, n);
}
}
}
}
int main()
{
const int num = 5;
int arr[num] = {1, 4, 3, 6, 2};
insert_sort(arr, num);
return 0;
}
冒泡排序
#include <iostream >
using std::cout;
using std::endl;
void printArr(int arr[], int n)
{
for (int i = 0; i < n; i++)
{
cout << arr[i] << "\t";
}
cout << endl;
}
void bubble_sort(int arr[], int n)
{
bool flag = false;
for (int i = 0; i < n; i++)
{
flag = false;
for (int j = 0; j < n - i - 1; j++)
{
if (arr[j + 1] < arr[j])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = true;
}
}
if (!flag)
{
return;
}
}
}
int main()
{
const int num = 5;
int arr[num] = {1, 4, 3, 6, 2};
cout << "排序之前: ";
printArr(arr, num);
bubble_sort(arr, num);
cout << "排序之后: ";
printArr(arr, num);
}
选择排序
#include <iostream>
using std::cout;
using std::endl;
void printArr(int arr[], int n)
{
for (int i = 0; i < n; i++)
{
cout << arr[i] << "\t";
}
cout << endl;
}
void select_sort(int arr[], int n)
{
printArr(arr, n);
for (int i = 0; i < n; i++)
{
int min = arr[i];
int index = i;
for (int j = i+1; j < n; j++)
{
if (arr[j] < min)
{
min = arr[j];
index = j;
}
}
if (index != i)
{
int tmp = arr[i];
arr[i] = arr[index];
arr[index] = tmp;
}
}
printArr(arr, n);
}
int main()
{
const int num = 5;
int arr[num] = {1, 4, 3, 6, 2};
select_sort(arr, num);
return 0;
}
归并排序
#include <iostream>
using std::cout;
using std::endl;
void printArr(const int *arr, int left, int right)
{
for (int i = left; i <= right; i++)
{
cout << arr[i] << "\t";
}
cout << endl;
}
void printArr(const int *arr, int n)
{
printArr(arr, 0, n-1);
}
void merge(int *arr, const int left, const int mid, const int right)
{
int *tmp = new int[right - left + 1];
int i = left;
int j = mid + 1;
int k = 0;
while (i <= mid && j <= right)
{
if (arr[i] < arr[j])
{
tmp[k] = arr[i];
k++;
i++;
}
else
{
tmp[k] = arr[j];
k++;
j++;
}
}
while (i <= mid)
{
tmp[k] = arr[i];
k++;
i++;
}
while (j <= right)
{
tmp[k] = arr[j];
k++;
j++;
}
k = 0;
for (int i = left; i <= right; i++)
{
arr[i] = tmp[k];
k++;
}
delete[] tmp;
}
void sort(int *arr, const int left, const int right)
{
if (left >= right)
{
return;
}
int mid = (right - left) / 2 + left;
sort(arr, left, mid);
sort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
void merge_sort(int *arr, const int n)
{
sort(arr, 0, n - 1);
}
int main()
{
const int num = 6;
int arr[num] = {3, 4, 1, 6, 2, 5};
cout << "排序之前: ";
printArr(arr, num);
merge_sort(arr, num);
cout << "排序之后: ";
printArr(arr, num);
return 0;
}
快速排序
#include <iostream>
using std::cout;
using std::endl;
void printArr(const int *arr, int n)
{
for (int i = 0; i < n; i++)
{
cout << arr[i] << "\t";
}
cout << endl;
}
void sort(int *arr, int left, int right)
{
if (left >= right)
{
return;
}
int pivot = arr[left];
int i = left, j = right;
while (left < right)
{
while (left < right && arr[right] > pivot)
{
right--;
}
if (left < right)
{
arr[left] = arr[right];
left++;
}
while (left < right && arr[left] < pivot)
{
left++;
}
if (left < right)
{
arr[right] = arr[left];
right--;
}
}
arr[left] = pivot;
sort(arr, i, left);
sort(arr, left + 1, j);
}
void quick_sort(int *arr, int n)
{
printArr(arr, n);
sort(arr, 0, n - 1);
printArr(arr, n);
}
int main()
{
const int num = 6;
int arr[num] = {3, 4, 1, 6, 2, 5};
quick_sort(arr, num);
return 0;
}