搜索引擎排序DEMO
#include<stdio.h>int lookarr(int* arr, int arrSize)
{for (int i = 0; i < arrSize; i++) {printf("%d, ", arr[i]);}printf("\n");
}int lookarr2(int** arr, int arrSize)
{printf("======\n");for (int i = 0; i < 6; i++) {for (int j = 0; j < 3; j++) {printf("%d ,", arr[i][j]);}printf("\n");}printf("======\n");
}
int SelectSort(int* arr, int arrSize, int order)
{int i, j;int temp;for (i = 0; i < arrSize; i++) {for (j = i + 1; j < arrSize; j++) {if ((arr[i] - arr[j]) * order > 0) {temp = arr[i];arr[i] = arr[j];arr[j] = temp;lookarr(arr, arrSize);}}}
}int SelectSort2(int** arr, int arrSize, int order1, int order2)
{int i, j;int count = 0;int *temp = (int *)malloc(sizeof(int) * 2);for (i = 0; i < arrSize; i++) {for (j = i + 1; j < arrSize; j++) {if ((arr[i][0] - arr[j][0]) * order1 > 0) {memcpy(temp, arr[i], sizeof(int) * 2);memcpy(arr[i], arr[j], sizeof(int) * 2);memcpy(arr[j], temp, sizeof(int) * 2);printf("count = %d\n", ++count);lookarr2(arr, arrSize);}else if ((arr[i][0] - arr[j][0]) * order1 == 0) {if ((arr[i][1] - arr[j][1]) * order2 > 0) {memcpy(temp, arr[i], sizeof(int) * 2);memcpy(arr[i], arr[j], sizeof(int) * 2);memcpy(arr[j], temp, sizeof(int) * 2);printf("count = %d\n", ++count);lookarr2(arr, arrSize);}}}}
}int sort_cmp(int *a, int *b, int **orderby, int depth)
{int sort_index = orderby[depth][0];if (orderby[depth][1] != 0)return (a[sort_index] - b[sort_index]) * orderby[depth][1];elsereturn 0;
}int sort_arr_index(int* a, int* b, int* temp, int size)
{memcpy(temp, a, sizeof(int) * size);memcpy(a, b, sizeof(int) * size);memcpy(b, temp, sizeof(int) * size);
}void sort_func(int **arr, int i, int j, int **orderby, int *temp, int *count, int arrSize, int depth, int orderbySize)
{if (sort_cmp(arr[i], arr[j], orderby, depth) > 0) {sort_arr_index(arr[i], arr[j], temp, 3);printf("count = %d\n", ++(*count));lookarr2(arr, arrSize);}else if (sort_cmp(arr[i], arr[j], orderby, depth) == 0) {if (orderbySize <= depth)return;sort_func(arr, i, j, orderby, temp, count, arrSize, depth + 1, orderbySize);}return;
}
int SelectSort2order(int** arr, int arrSize, int **orderby, int orderbySize)
{int i, j;int count = 0;int* temp = (int*)malloc(sizeof(int) * 2);int si[2] = { orderby[0][0], orderby[1][0] };printf("sort_index = %d, %d\n", si[0], si[1]);int order[5] = { 0 };order[0] = orderby[0][1];order[1] = orderby[1][1];for (i = 0; i < arrSize; i++) {for (j = i + 1; j < arrSize; j++) {if (sort_cmp(arr[i], arr[j], orderby, 0) > 0) {sort_arr_index(arr[i], arr[j], temp, 2);printf("count = %d\n", ++count);lookarr2(arr, arrSize);}else if (sort_cmp(arr[i], arr[j], orderby, 0) == 0) {if (sort_cmp(arr[i], arr[j], orderby, 1) > 0) {sort_arr_index(arr[i], arr[j], temp, 2);printf("count = %d\n", ++count);lookarr2(arr, arrSize);}else if (sort_cmp(arr[i], arr[j], orderby, 1) == 0) {}}}}return 0;
}void SelectSort2digui(int** arr, int arrSize, int** orderby, int orderbySize)
{int i, j;int count = 0;int* temp = (int*)malloc(sizeof(int) * 3);int depth = 0;for (i = 0; i < arrSize; i++) {for (j = i + 1; j < arrSize; j++) {sort_func(arr, i, j, orderby, temp,&count, arrSize, depth, orderbySize);}}
}
int testSelectSort()
{int arr[][3] = { {9, 4, 4}, {9, 1, 5}, {8, 7, 7}, {8, 1, 9}, {8, 5, 5}, {8, 5, 4} };int** pparr = (int**)malloc(sizeof(int*) * 6);for (int i = 0; i < 6; i++) {pparr[i] = (int*)malloc(sizeof(int) * 3);memcpy(pparr[i], arr[i], sizeof(arr[i]));}int orderByArr[3][2] = { {2, 1}, {1, 1}, {0, 1} };int **orderby = (int**)malloc(sizeof(int*) * 3);for (int i = 0; i < 3; i++) {orderby[i] = (int*)malloc(sizeof(int) * 2);memcpy(orderby[i], orderByArr[i], sizeof(orderByArr[i]));}for (int i = 0; i < 3; i++) {for (int j = 0; j < 2; j++) {printf("%d ,", orderby[i][j]);}printf("%\n");}SelectSort2digui(pparr, 6, orderby, 3);
}