赞
踩
- #include "stdio.h"
-
- int partition(int *n,int left,int right) {
- int t = n[left];
- while (left < right) {
- while (left<right && n[right]>t) {
- right--;
- }
- n[left] = n[right];
- while (left < right && n[left] < t) {
- left++;
- }
- n[right] = n[left];
- }
- n[left] = t;
- return left;
- }
- void Quick_sort(int *n,int left,int right) {
- if (left < right) {
- int mid = partition(n,left,right);
- Quick_sort(n, left, mid - 1);
- Quick_sort(n, mid + 1, right);
- }
- }
- int main() {
- int nums_1[] = { 3,2,5,1,7,9,6,0,8,4},size1;
- size1 = sizeof(nums_1) / sizeof(nums_1[0]);
- Quick_sort(nums_1, 0, size1 - 1);
- for (int i = 0; i < size1; i++) {
- printf("%d ",nums_1[i]);
- }
- return 0;
- }

例: 将一个数组分割称为左右两部分,两部分均为乱序数组,通过函数嵌套的思想,对剩下的乱序数组进行排序,找到中间mid的位置,继续分割,知道将整个数组排好序为止
给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。
示例 1:
输入:nums = [1,2,3,1]
输出:true
示例 2:输入:nums = [1,2,3,4]
输出:false
示例 3:输入:nums = [1,1,1,3,3,4,3,2,4,2]
输出:true
两种思路解题
法一:
代码较为简单,使用双重for循环,但是时间复杂度较高,O(n²)
- bool containsDuplicate(int* nums, int numsSize){
- for (int i = 0; i < numsSize; i++) {
- for (int j = i + 1; j < numsSize; j++) {
- if (nums[i] == nums[j]) {
- return true;
- }
- }
- }
- return false;
- }
法二:
使用快排,先对整个数组进行排序,然后再进行比较,时间复杂度为O(n)
这样排序后相同元素相邻,我们只需要比较相邻元素是否相同即可,可以少一重循环,但排序本身也可能进行循环,所以必须要使用一个简单的排序算法。
- int partition(int *n,int left,int right) {
- int t = n[left];
- while (left < right) {
- while (left<right && n[right]>t) {
- right--;
- }
- n[left] = n[right];
- while (left < right && n[left] < t) {
- left++;
- }
- n[right] = n[left];
- }
- n[left] = t;
- return left;
- }
-
- void Quick_sort(int *n,int left,int right) {
- if (left < right) {
- int mid = partition(n,left,right);
- Quick_sort(n, left, mid - 1);
- Quick_sort(n, mid + 1, right);
- }
- }
-
- bool containsDuplicate(int *n,int size1) {
- if (size1 == 0) return false;
- int i = 0;
- Quick_sort(nums_1, 0, size1 - 1);
- while (i < size1 - 1) {
- if (nums_1[i] == nums_1[++i]) return true;
- }
- return false;
-
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。