当前位置:网站首页>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 .
边栏推荐
- 使用 C# 提取 PDF 文件中的所有文字(支持 .NET Core)
- Today's sleep quality record 78 points
- Press the button wizard to learn how to fight monsters - identify the map, run the map, enter the gang and identify NPC
- PHP code audit 3 - system reload vulnerability
- IPv6 comprehensive experiment
- Kotlin set operation summary
- Number of relationship models
- Rhcsa day 10 operation
- Reprint: summation formula of proportional series and its derivation process
- Rhcsa12
猜你喜欢
IPv6 comprehensive experiment
Devop basic command
Introduction to extensible system architecture
The most detailed teaching -- realize win10 multi-user remote login to intranet machine at the same time -- win10+frp+rdpwrap+ Alibaba cloud server
【Day1】 deep-learning-basics
DDL statement of MySQL Foundation
Occasional pit compiled by idea
Recursion and divide and conquer strategy
Some summaries of the third anniversary of joining Ping An in China
Collection of practical string functions
随机推荐
MySQL case
按键精灵打怪学习-识别所在地图、跑图、进入帮派识别NPC
Use C to extract all text in PDF files (support.Net core)
Sword finger offer 31 Stack push in and pop-up sequence
Exercise 7-4 find out the elements that are not common to two arrays (20 points)
Time complexity and space complexity
For programmers, if it hurts the most...
Ruby time format conversion strftime MS matching format
A little feeling
Summary of several job scheduling problems
Exercise 9-3 plane vector addition (15 points)
uniapp 小于1000 按原数字显示 超过1000 数字换算成10w+ 1.3k+ 显示
leetcode1229. Schedule the meeting
【Day2】 convolutional-neural-networks
Introduction to tree and binary tree
Knapsack problem and 0-1 knapsack problem
【FAQ】华为帐号服务报错 907135701的常见原因总结和解决方法
Service developers publish services based on EDAs
原生div具有编辑能力
Seven examples to understand the storage rules of shaped data on each bit