#include <stdio.h>
void swap (int *x, int *y)
{
int temp;
temp = *x; *x = *y; *y = temp;
}
// 插入排序 升序
void insertsort(int arr[], int size){
int i, j; // 声明两个计数器
int to_insert; // 此变量用来保存即将被插入的哪个数
for(i = 1; i<size; i++){ // 第一个数不用插入,一个数当然是有序的,多以从第二个数开始进行插入操作
to_insert = arr[i]; // 将待插入的数字保存到临时变量里,将坑i让出来
for(j=i-1; j>=0&&arr[j]>to_insert;j--){ // 这里就是插入的条件了,从i=1的时候开始操作,从后向前扫描前i个已经排序好的数字(用j来遍历),如果下标不越界并且当前值大于将要被插入的值,则将当前值往后移动一位,不用担心会覆盖后面的值,因为我们已经将它保存在to_insert变量中了。
arr[j+1] = arr[j];
}
// 当不再满足上面的移动条件时,说明j已经遇到了小于或者等于to_insert的值,或者下标越界
arr[j+1] = to_insert; // 当前的j所指向的值已经是小于或者等于to_insert的值了,所以将to_insert放在这个值之后,保证整个序列是非递减的
}
}
// 选择排序 降序
void selectsort(int arr[], int size)
{
int i, j;
for (i=0; i<size; i++)
{
for (j = i+1; j<size; j++)
{
if (arr[i] < arr[j])
{
swap(&arr[i], &arr[j]);
}
}
}
}
// 冒泡排序 升序
void bubblesort(int arr[], int size)
{
int i, j;
for (i=0; i<size; i++)
{
for (j=0; j<size-1-i; j++)
{
if (arr[j] > arr[j+1])
{
swap (&arr[j], &arr[j+1]);
}
}
}
}
// 快速排序
void quicksort(int arr[], int left, int right)
{
if(right > left)
{
int storeIndex = left;
int i;
swap(&arr[(left+right)/2], &arr[right]);
for(i=left; i<right; i++)
{
if(arr[i] > arr[right])
{
swap(&arr[i], &arr[storeIndex]);
++storeIndex;
}
}
swap(&arr[storeIndex], &arr[right]);
quicksort(arr, left, storeIndex-1);
quicksort(arr, storeIndex+1, right);
}
}
void swap (int *x, int *y)
{
int temp;
temp = *x; *x = *y; *y = temp;
}
// 插入排序 升序
void insertsort(int arr[], int size){
int i, j; // 声明两个计数器
int to_insert; // 此变量用来保存即将被插入的哪个数
for(i = 1; i<size; i++){ // 第一个数不用插入,一个数当然是有序的,多以从第二个数开始进行插入操作
to_insert = arr[i]; // 将待插入的数字保存到临时变量里,将坑i让出来
for(j=i-1; j>=0&&arr[j]>to_insert;j--){ // 这里就是插入的条件了,从i=1的时候开始操作,从后向前扫描前i个已经排序好的数字(用j来遍历),如果下标不越界并且当前值大于将要被插入的值,则将当前值往后移动一位,不用担心会覆盖后面的值,因为我们已经将它保存在to_insert变量中了。
arr[j+1] = arr[j];
}
// 当不再满足上面的移动条件时,说明j已经遇到了小于或者等于to_insert的值,或者下标越界
arr[j+1] = to_insert; // 当前的j所指向的值已经是小于或者等于to_insert的值了,所以将to_insert放在这个值之后,保证整个序列是非递减的
}
}
// 选择排序 降序
void selectsort(int arr[], int size)
{
int i, j;
for (i=0; i<size; i++)
{
for (j = i+1; j<size; j++)
{
if (arr[i] < arr[j])
{
swap(&arr[i], &arr[j]);
}
}
}
}
// 冒泡排序 升序
void bubblesort(int arr[], int size)
{
int i, j;
for (i=0; i<size; i++)
{
for (j=0; j<size-1-i; j++)
{
if (arr[j] > arr[j+1])
{
swap (&arr[j], &arr[j+1]);
}
}
}
}
// 快速排序
void quicksort(int arr[], int left, int right)
{
if(right > left)
{
int storeIndex = left;
int i;
swap(&arr[(left+right)/2], &arr[right]);
for(i=left; i<right; i++)
{
if(arr[i] > arr[right])
{
swap(&arr[i], &arr[storeIndex]);
++storeIndex;
}
}
swap(&arr[storeIndex], &arr[right]);
quicksort(arr, left, storeIndex-1);
quicksort(arr, storeIndex+1, right);
}
}