#include <stdio.h>
int setting(int *arr){
int light = 9;for(int k =0 ;k <light;k++){
printf("k=%d==>arr[] = %d \n",k,arr[k]);}return 0;}
int partition(int *arr, int leftBound, int rightBound){
int left = leftBound;
int mid = rightBound;
int right = rightBound-1;while(left<=right){//1、这两个指针分别寻找小于标杆和大于标杆的数,找到以后指针停止
//2、交换两边指针停止位置的数
//3、将标杆放到中间的位置
while(left<=right&&arr[left]<=arr[mid]){
left++;}while(left<=right&&arr[right]>arr[mid]){
right--;}if(left<right){
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;}}//把标杆放中间
int temp2 = arr[left];
arr[left] = arr[rightBound];
arr[rightBound] = temp2;return left;}
void sort(int *arr, int leftBound, int rightBound){if(leftBound>=rightBound){return;}
int mid = partition(arr, leftBound, rightBound);sort(arr,leftBound,mid-1);sort(arr,mid+1,rightBound);}
int main(){
int arr[9] = {5, 3, 6, 8, 1, 7, 9, 4, 2};//选择排序
//性质:1、时间复杂度:O(n2) 2、空间复杂度:O(1) 3、非稳定排序 4、原地排序
/*for(int i = 0; i < 8; i++){
int min = i;for(int j = i+1; j < 9; j++){if(arr[i]>=arr[j]){
min = j;
int temp = arr[i];
arr[i] = arr[min];
arr[j] = temp;}}}*///插入排序
/*for(int i = 1; i < 9; i++){//内层比较是从外层的赋值为起始点
//该值会和它前面的值比较,如果比前面的值小就交换
for(int j = i;j>0; j--){if(arr[j]<arr[j-1]){
int temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;}}}*///冒泡排序
/*for(int i = 0; i < 9; i++){//内层循环像指针一样指导着程序运行
for(int j = 0; j < 9-i-1; j++){if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;}}}*///希尔排序
/*int h = 9/2;for(int gap = h; gap > 0; gap--){//间隔的循环
for(int j = 0; j < 9-gap; j++){if(arr[j]>arr[j+gap]){
int temp = arr[j];
arr[j] = arr[j+gap];
arr[j+gap] = temp;}}}*///快排
sort(arr,0,9-1);
setting(arr);return 0;}