Skip to content

Commit

Permalink
Merge pull request wangzheng0822#73 from RichardWeiYang/master
Browse files Browse the repository at this point in the history
Sorts in c
  • Loading branch information
wangzheng0822 authored Oct 22, 2018
2 parents dba6967 + b21be9c commit 40e8576
Show file tree
Hide file tree
Showing 2 changed files with 142 additions and 0 deletions.
139 changes: 139 additions & 0 deletions c-cpp/11_sorts/sorts.c
Original file line number Diff line number Diff line change
@@ -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;
}
3 changes: 3 additions & 0 deletions java/11_sorts/Sorts.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ public static void selectionSort(int[] a, int n) {
}
}

if (minIndex == i)
continue;

// 交换
int tmp = a[i];
a[i] = a[minIndex];
Expand Down

0 comments on commit 40e8576

Please sign in to comment.