当前位置:网站首页>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 .
边栏推荐
- AUTOSAR from getting started to mastering 100 lectures (106) - SOA in domain controllers
- 按键精灵跑商学习-商品数量、价格提醒、判断背包
- Dynamic address book
- Exercise 7-2 finding the maximum value and its subscript (20 points)
- Time complexity and space complexity
- 基于线性函数近似的安全强化学习 Safe RL with Linear Function Approximation 翻译 1
- OSPF summary
- leetcode729. My schedule 1
- 【OpenCV 例程200篇】218. 多行倾斜文字水印
- 【FAQ】华为帐号服务报错 907135701的常见原因总结和解决方法
猜你喜欢
A little feeling
Advanced technology management - how to design and follow up the performance of students at different levels
今日睡眠质量记录78分
DCL statement of MySQL Foundation
Rhsca day 11 operation
Evolution from monomer architecture to microservice architecture
Two way process republication + routing policy
Histogram equalization
Seven examples to understand the storage rules of shaped data on each bit
uniapp 处理过去时间对比现在时间的时间差 如刚刚、几分钟前,几小时前,几个月前
随机推荐
2. Data type
2021-08-11 function pointer
OSPF summary
2021-08-10 character pointer
Exercise 7-8 converting strings to decimal integers (15 points)
Devop basic command
Exercise 7-4 find out the elements that are not common to two arrays (20 points)
Four characteristics and isolation levels of database transactions
【OpenCV 例程200篇】218. 多行倾斜文字水印
Histogram equalization
【Day2】 convolutional-neural-networks
Uniapp--- initial use of websocket (long link implementation)
Kotlin set operation summary
Intelligent gateway helps improve industrial data acquisition and utilization
Seven examples to understand the storage rules of shaped data on each bit
[200 opencv routines] 218 Multi line italic text watermark
Hlk-w801wifi connection
Es advanced series - 1 JVM memory allocation
Latex learning insertion number - list of filled dots, bars, numbers
Read a piece of text into the vector object, and each word is stored as an element in the vector. Convert each word in the vector object to uppercase letters. Output the converted elements in the vect