当前位置:网站首页>Quick sort (C language)
Quick sort (C language)
2022-07-04 10:27:00 【Lol only plays Timo】
There are many sorts , For example, Hill sort , Bubble sort , Heap sort … … There are many kinds of , Today I want to talk about the Quicksort with the lowest time complexity .
First, let's learn about the manual process of quick sorting :

With the understanding of this manual process , The code is ready , We can write an exchange function first :
void swapOnce(int *array, int start, int end) {
int i = start;
int j = end;
int temp = array[i];
if (i >= j) {
return;
}
while (i < j) {
while (i < j && array[j] > temp) {
j--;
}
if (i < j) {
array[i++] = array[j];
}
while (i < j && array[i] < temp) {
i++;
}
if (i < j) {
array[j--] = array[i];
}
}
array[i] = temp;
swapOnce(array, start, i - 1);
swapOnce(array, i + 1, end);
}
The last two lines of this exchange function are actually the idea of recursion , Because after the first overall exchange , that temp In fact, the whole array is divided into two sub arrays , The work to be done in the two sub arrays is actually the same as that of this large array , So just call this exchange function again .
The following is the array generation and the complete code of this quick sort :
#include <stdio.h>
#include <malloc.h>
#include <time.h>
int *creatArray(int minValue, int maxValue, int count);
void showArray(int *array, int count);
void swapOnce(int *array, int start, int end);
void quickSort(int *array, int count);
void quickSort(int *array, int count) {
swapOnce(array, 0, count-1);
}
void swapOnce(int *array, int start, int end) {
int i = start;
int j = end;
int temp = array[i];
if (i >= j) {
return;
}
while (i < j) {
while (i < j && array[j] > temp) {
j--;
}
if (i < j) {
array[i++] = array[j];
}
while (i < j && array[i] < temp) {
i++;
}
if (i < j) {
array[j--] = array[i];
}
}
array[i] = temp;
swapOnce(array, start, i - 1);
swapOnce(array, i + 1, end);
}
void showArray(int *array, int count) {
int index;
for(index = 0; index < count; index++) {
printf("[%d] ",array[index]);
}
printf("\n");
}
int *creatArray(int minValue, int maxValue, int count) {
int index;
int value;
int *array;
srand(time(0));
array = (int *) calloc(sizeof(int), count);
for (index = 0; index < count; index++) {
value = rand() % (maxValue - minValue + 1) + minValue;
array[index] = value;
}
return array;
}
int main() {
int *array = NULL;
int maxValue;
int minValue;
int count;
printf("please input minValue/maxValue/count:");
scanf("%d%d%d", &minValue, &maxValue, &count);
array = creatArray(minValue, maxValue, count);
printf("before sorting:\n");
showArray(array, count);
printf("after sorting:\n");
quickSort(array, count);
showArray(array, count);
free(array);
return 0;
}
Let's take a look at the running result of this function :
If you generate a function for the array in this code , Or if you have any questions about this code, you can leave a message below , Or believe me .
边栏推荐
- Exercise 7-2 finding the maximum value and its subscript (20 points)
- Number of relationship models
- The most detailed teaching -- realize win10 multi-user remote login to intranet machine at the same time -- win10+frp+rdpwrap+ Alibaba cloud server
- RHCE - day one
- Static comprehensive experiment ---hcip1
- 转载:等比数列的求和公式,及其推导过程
- Rhcsa learning practice
- Vanishing numbers
- Native div has editing ability
- Check 15 developer tools of Alibaba
猜你喜欢

Servlet基本原理与常见API方法的应用

2. Data type

Rhcsa12

【Day1】 deep-learning-basics

5g/4g wireless networking scheme for brand chain stores

Four characteristics and isolation levels of database transactions

转载:等比数列的求和公式,及其推导过程

Delayed message center design

【OpenCV 例程200篇】218. 多行倾斜文字水印

Sword finger offer 05 (implemented in C language)
随机推荐
基于线性函数近似的安全强化学习 Safe RL with Linear Function Approximation 翻译 2
Histogram equalization
View CSDN personal resource download details
2021-08-10 character pointer
Occasional pit compiled by idea
Exercise 7-3 store the numbers in the array in reverse order (20 points)
MPLS: multi protocol label switching
Ruby time format conversion strftime MS matching format
Architecture introduction
A little feeling
Debug:==42==ERROR: AddressSanitizer: heap-buffer-overflow on address
Network disk installation
[untitled]
Rhsca day 11 operation
如果不知道這4種緩存模式,敢說懂緩存嗎?
AUTOSAR from getting started to mastering 100 lectures (106) - SOA in domain controllers
2. Data type
Reasons and solutions for the 8-hour difference in mongodb data date display
Rhcsa learning practice
Dynamic memory management