冒泡排序
for (int i = 1; i < n; i++)
{
for (int j = 0; j < n - i; j++)
{
if (a[j] > a[j + 1])
{
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
选择排序
for (int i = 0; i < n - 1; i++)
{
int t = i;
for (int j = i + 1; j < n; j++)
{
if (a[t] > a[j])
{
t = j;
}
}
if (t != i)
{
int temp = a[i];
a[i] = a[t];
a[t] = temp;
}
}
qsort(a, k, sizeof(a[0]), cmp);
快排
整形数组排序
static int cmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
qsort(a, k, sizeof(a[0]),cmp); // a为数组,k为数组长度
字符数组排序
static int cmp(const void *a, const void *b)
{
return *(char *)a - *(char *)b;
}
qsort(a, len, sizeof(a[0]), cmp);
double数组排序:注意不能直接返回
static int cmpd(const void *a, const void *b)
{
double res = *(double *)a - *(double *)b;
if (res > 0) {
return 1;
}
return 0;
}
字符串排序
char a[][10] = {"asasd","asdsfd","sd"};
static int cmp(const void *a,const void *b)
{
return strcmp((char *)a, (char *)b);
}
qsort(a, k, sizeof(a[0]),cmp); // k = 3;
int cmp(const void *a, const void *b)
{
char *x = *(char **)a;
char *y = *(char **)b;
return strcmp(x, y);
}
qsort(orderTime, orderTimeSize, sizeof(orderTime[0]), Cmp); // **orderTime作为形参传入
二维数组排序
char a[][2]={1,2,3,4,2,3,4,5};
static int cmp(const void *a, const void *b)
{
int *x = *(int **)a;
int *y = *(int **)b;
if (x[0] == y[0])
{
return x[1] - y[1];
}
return x[0] - y[0];
}
qsort(a, k, sizeof(a[0]), cmp); // k = 4
**结构体排序 **
/* 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。*/
typedef struct data{
int num;
int id;
}data;
static int cmp(const void *a, const void *b)
{
data *aa = (data *)a;
data *bb = (data *)b;
return aa->num - bb->num;
}
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
int *p = (int *)malloc(sizeof(int) * 2);
data *arr = (data *)malloc(sizeof(data) * numsSize);
for (int i = 0; i < numsSize; i++)
{
arr[i].num = nums[i];
arr[i].id = i;
}
qsort(arr, numsSize, sizeof(data), cmp);
int start = 0, end = numsSize - 1;
for (int i = 0; i < numsSize; i++)
{
if (target == arr[start].num + arr[end].num)
{
p[0] = arr[start].id;
p[1] = arr[end].id;
}
else if(arr[start].num + arr[end].num > target)
{
end--;
}
else{
start++;
}
}
*returnSize = 2;
return p;
}