commit
40e85765af
139
c-cpp/11_sorts/sorts.c
Normal file
139
c-cpp/11_sorts/sorts.c
Normal file
@ -0,0 +1,139 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
struct array {
|
||||
int size;
|
||||
int used;
|
||||
int *arr;
|
||||
};
|
||||
|
||||
void dump(struct array *array)
|
||||
{
|
||||
int idx;
|
||||
|
||||
for (idx = 0; idx < array->used; idx++)
|
||||
printf("[%02d]: %08d\n", idx, array->arr[idx]);
|
||||
}
|
||||
|
||||
void alloc(struct array *array)
|
||||
{
|
||||
array->arr = (int *)malloc(array->size * sizeof(int));
|
||||
}
|
||||
|
||||
void bubble_sort(struct array *array)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
if (array->used <= 1)
|
||||
return;
|
||||
|
||||
for (i = 0; i < array->used; i++) {
|
||||
bool has_swap = false;
|
||||
for (j = 0; j < array->used - i - 1; j++) {
|
||||
if (array->arr[j] > array->arr[j+1]) {
|
||||
int tmp;
|
||||
tmp = array->arr[j];
|
||||
array->arr[j] = array->arr[j+1];
|
||||
array->arr[j+1] = tmp;
|
||||
has_swap = true;
|
||||
}
|
||||
|
||||
}
|
||||
if (!has_swap)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void bubble_sort_test()
|
||||
{
|
||||
int idx;
|
||||
struct array ten_int = {10, 0, NULL};
|
||||
|
||||
alloc(&ten_int);
|
||||
for (idx = 0; idx < 10; idx++)
|
||||
ten_int.arr[idx] = 30 - idx;
|
||||
ten_int.used = 10;
|
||||
dump(&ten_int);
|
||||
bubble_sort(&ten_int);
|
||||
dump(&ten_int);
|
||||
}
|
||||
|
||||
void insertion_sort(struct array *array)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
if (array->used <= 1)
|
||||
return;
|
||||
|
||||
for (i = 1; i < array->used; i++) {
|
||||
int val = array->arr[i];
|
||||
|
||||
for (j = i - 1; j >= 0; j--) {
|
||||
if (val < array->arr[j])
|
||||
array->arr[j+1] = array->arr[j];
|
||||
else
|
||||
break;
|
||||
}
|
||||
array->arr[j+1] = val;
|
||||
}
|
||||
}
|
||||
|
||||
void insertion_sort_test()
|
||||
{
|
||||
int idx;
|
||||
struct array ten_int = {10, 0, NULL};
|
||||
|
||||
alloc(&ten_int);
|
||||
for (idx = 0; idx < 10; idx++)
|
||||
ten_int.arr[idx] = 30 - idx;
|
||||
ten_int.used = 10;
|
||||
dump(&ten_int);
|
||||
insertion_sort(&ten_int);
|
||||
dump(&ten_int);
|
||||
}
|
||||
|
||||
void selection_sort(struct array *array)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
if (array->used <= 1)
|
||||
return;
|
||||
|
||||
for (i = 0; i < array->used - 1; i++) {
|
||||
int tmp, idx = i;
|
||||
|
||||
for (j = i + 1; j < array->used; j++)
|
||||
if (array->arr[j] < array->arr[idx])
|
||||
idx = j;
|
||||
|
||||
if (idx == i)
|
||||
continue;
|
||||
|
||||
tmp = array->arr[i];
|
||||
array->arr[i] = array->arr[idx];
|
||||
array->arr[idx] = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
void selection_sort_test()
|
||||
{
|
||||
int idx;
|
||||
struct array ten_int = {10, 0, NULL};
|
||||
|
||||
alloc(&ten_int);
|
||||
for (idx = 0; idx < 10; idx++)
|
||||
ten_int.arr[idx] = 30 - idx;
|
||||
ten_int.used = 10;
|
||||
dump(&ten_int);
|
||||
selection_sort(&ten_int);
|
||||
dump(&ten_int);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
//bubble_sort_test();
|
||||
//selection_sort_test();
|
||||
insertion_sort_test();
|
||||
return 0;
|
||||
}
|
@ -58,6 +58,9 @@ public class Sorts {
|
||||
}
|
||||
}
|
||||
|
||||
if (minIndex == i)
|
||||
continue;
|
||||
|
||||
// 交换
|
||||
int tmp = a[i];
|
||||
a[i] = a[minIndex];
|
||||
|
Loading…
Reference in New Issue
Block a user