#include <stdio.h> #include <stdlib.h> #include <memory> #include <vector> #include<string> using namespace std; void swap(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } void quicksort(int* arr,int start,int end) { if (start >= end) return; int left = start; int right = end; int mid = arr[(start + end)/2]; do { while (arr[left] < mid) left++; while (arr[right] > mid) right--; if (left <= right) { swap(&arr[left], &arr[right]); left++; right--; } } while (left<=right); quicksort(arr,start, right); quicksort(arr,left,end); } void swap_str(char* a, char* b) { static char temp[20]; memcpy(temp,a,strlen(a)); memset(a,'\0',strlen(a)); memcpy(a, b,strlen(b)); memset(b, '\0', strlen(b)); memcpy(b,temp,sizeof(temp)); memset(temp, '\0', 20); } void quicksort_str(char** arr, int start, int end) { if (start >= end) return; int left = start; int right = end; char* mid = arr[(start + end) / 2]; do { while (strcmp((const char *)arr[left],(const char *)mid)<0) left++; while (strcmp((const char*)arr[right], (const char*)mid)>0) right--; if (left <= right) { swap_str(arr[left], arr[right]); left++; right--; } } while (left <= right); quicksort_str(arr, start, right); quicksort_str(arr, left, end); } int main() { int loop = 0; int n = 10; int arr[] = { 12,32,34,13,64,234,7,2,5652,34 }; char str[][20] = {"abc","my","dsaf","asfdsa","adce","adfe","wefc","z","za","abcd"}; char* a[10]; for (loop = 0; loop < 10; loop++) { a[loop] = &str[loop][0];
} quicksort_str(a,0,9); for (loop=0; loop <10; loop++) { printf("%s ", a[loop]); } }
标签:arr,right,end,int,start,算法,字符串,排序,left From: https://www.cnblogs.com/ysyyrps-hhl/p/17736596.html