目录
排序练习
给出一个数组,奇数序号降序,偶数序号升序,要求重排成重小到大的数组,时间复杂度为O(n)
#include "sort.h"
//给出一个数组,奇数序号降序,偶数序号升序,要求重排成重小到大的数组,时间复杂度为O(n)
void main()
{
int a[] = {1,20,2,18,3,2,4,1};
int lenth = 7;
int b[10] = { 0 };
int j = lenth, k = 0;
int i = 0;
if (lenth % 2)i = 0;
else j = lenth - 1;
while(i<=lenth||j>=0)
{
if(i <= lenth && j >= 0){
if (a[i] < a[j]) {
b[k] = a[i]; i = i + 2; k++;
}
else {
b[k] = a[j]; j = j - 2; k++;
}
}
else if (i > lenth&& j >= 0) {
b[k] = a[j]; j = j - 2; k++;
}
else if (i <= lenth && j < 0) {
b[k] = a[i]; i = i + 2; k++;
}
}
for (int i = 0; i <=lenth; i++)
printf("%d ",b[i]);
}
快速排序算法
void swap(int* nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
void divide(int* nums, int i, int j) {
int k = nums[i];
int n = 0;
while (j > i) {
if (n % 2 == 0) {//偶数次交换,用j比较
if (k < nums[j])j--;
else {
swap(nums, i, j);
i++;
n++;
}
}
else{//奇数次交换,用i比较
if (nums[i] < k)i++;
else {
swap(nums, i, j);
j--;
n++;
}
}
}
return;
}
void quickSort(int* nums, int i, int j) {
if (i >= j)return;
int k = nums[i];
int s = i, e = j;
while (j> i) {
//偶数次交换,用j比较
while (i < j && k <= nums[j])j--;
swap(nums, i, j);
//奇数次交换,用i比较
while (i < j && nums[i] <= k)i++;
swap(nums, i, j);
}
quickSort(nums, s, i-1);
quickSort(nums, i+1, e);
}
int main() {
int nums[] = { 7,1,3,8,12,11,2,9 };
quickSort(nums, 0, 7);
for (int i = 0; i < sizeof(nums) / sizeof(int); i++) {
printf("%d ", nums[i]);
}
}