重新学习一下一些基本的算法,写一些基本的。
这里排序的算法的原数组都是静态的随便敲几个值进去的,可以修改成动态生成数组元素(改了再贴上来)
C语言代码:
#include <stdio.h>
void print_arr(int i_arr[], int arr_size) {
for (int i = 0; i < arr_size; i++) {
printf("%d\t", *(i_arr+i));
}
printf("\n");
}
void swap(int *a, int *b){
int tmp = *a;
*a = *b;
*b = tmp;
}
/**
* partition the array,
* @i_arr: array
* @param p: first element index
* @parma r: last element index
*/
int partition(int i_arr[], int p, int r, int arr_size) {
int pos = p - 1;
int base = i_arr[r];
for (int i = p; i < r; i++) {
if (i_arr[i] <= base) {
pos++;
swap(&i_arr[i], &i_arr[pos]);
} else {
}
//base = i_arr[i];
}
swap(&i_arr[++pos], &i_arr[r]);
print_arr(i_arr, arr_size);
return pos;
}
/**
* main algorithm
*/
void quick_sort(int i_arr[], int p, int r, int arr_size){
if (p < r) {
int pos = partition(i_arr, p, r, arr_size);
//printf("pos:%d\n", pos);
quick_sort(i_arr, p, pos - 1, arr_size);
quick_sort(i_arr, pos + 1, r, arr_size);
}
}
int main(){
int i_arr[] = {10, 23, 5, 8, 12, 15, 20, 8, 16, 30, 85, 20};
quick_sort(i_arr, 0, sizeof(i_arr)/sizeof(int) - 1, sizeof(i_arr)/sizeof(int));
}
JAVA代码:
import static java.lang.System.out;
public class Quick_sort{
public static void main(String[] args){
int i_arr[] = {10, 6, 32, 2, 390, 34, 1, 48, 3, 18, 32, 8};
quick_sort(i_arr, 0, i_arr.length - 1);
print_arr(i_arr);
}
/**
**
*/
private static void quick_sort(int arr[], int start, int end){
if (start < end) {
int pos = partition(arr, start, end);
quick_sort(arr, start, pos - 1);
quick_sort(arr, pos + 1, end);
}
}
/**
** @return pos
*/
private static int partition(int arr[], int start, int end){
int pos = start - 1;
int base = arr[end];
for (int i = start; i < end; i++) {
if (arr[i] < base) {
pos++;
int tmp = arr[pos];
arr[pos] = arr[i];
arr[i] = tmp;
}
}
arr[end] = arr[++pos];
arr[pos] = base;
return pos;
}
/**
**
*/
private static void print_arr(int[] arr) {
for (int e : arr) {
out.print(e + "\t");
}
out.println("");
}
}