第一行输入一个整数
代表数组中的元素个数。
第二行输入
个整数
代表数组中的元素。
第三行输入一个整数
代表排序方式,其中,
表示按升序,
表示按降序。
在一行上输出
个整数,代表排序后的数组。
5 1 2 2 5 4 0
1 2 2 4 5
5 1 2 2 4 5 1
5 4 2 2 1
#include <iostream>
using namespace std;
int main()
{
	int Array_Number,Array[10000],iSortFlag,temp;
	while(cin>>Array_Number)
	{
		for(int i=0;i<Array_Number;i++)
			cin>>Array[i];
		cin>>iSortFlag;
		if(iSortFlag==1)//降序排序
		{
			for(int j=0;j<Array_Number;j++)
			{
				for(int k=0;k<Array_Number-j-1;k++)
				{
					if(Array[k]<Array[k+1])
					{
						temp=Array[k];
						Array[k]=Array[k+1];
						Array[k+1]=temp;
					}
				}
			}
		}
		else//升序排序
		{
			for(int j=0;j<Array_Number;j++)
			{
				for(int k=0;k<Array_Number-j-1;k++)
				{
					if(Array[k]>Array[k+1])
					{
						temp=Array[k];
						Array[k]=Array[k+1];
						Array[k+1]=temp;
					}
				}
			}
		}
		//输出排序后的数组
		for(int i=0;i<Array_Number-1;i++)
			cout<<Array[i]<<' ';
        cout<<Array[Array_Number-1]<<endl;
	}
}
#include <stdio.h>
int count;
void sortIntegerArray(int *array, int flag)
{
    int temp;
    int i, j;
    for(i = 0; i < count; i++ )
    {
        for(j = i + 1; j <= count -1; j++)
        {
            if(0 == flag)
            {
                if(array[i] > array[j])
                {
                    temp = array[j];
                    array[j] = array[i];
                    array[i] = temp;
                }
            }
            else
            {
                if(array[i] < array[j])
                {
                    temp = array[j];
                    array[j] = array[i];
                    array[i] = temp;
                }
            }
        }
    }
}
int main(int argc, char *argv[])
{
    int i;
    int flag;
    int array[1024] = {0};
    
    while(scanf("%d", &count) != EOF)
    {
        for(i = 0; i < count; i++)
        {
            scanf("%d", &array[i]);
        }
        scanf("%d", &flag);
        
        sortIntegerArray(array, flag);
        for(i = 0; i < count; i++)
        {
            if(i == count - 1 )
            {
                printf("%d\n", array[i]);
                break;
            }
            printf("%d ", array[i]);
        }
    }
    
    return 0;
} #include <bits/stdc++.h>
using namespace std;
bool cmp(int a,int b)//从大到小排序
{
    return a>b;
}
int main()
{
    int n=0,num;
    cin>>n;//输入数组的个数
    vector<int>result;
    while(n--)//每次输入一个数据就减少一个
    {
        cin>>num;//
        result.push_back(num);
    }
    int a;
    cin>>a;//输入0/1
    if(a==0)//如果是0则升序
    {
        sort(result.begin(),result.end());
        for(auto i:result)
            cout<<i<<" ";
            cout<<endl;
    }
    else//如果是1则降序
    {
        sort(result.begin(),result.end(),cmp);
        for(auto i:result)
            cout<<i<<" ";
            cout<<endl;
    }
  return 0;  
} #include<stdio.h>
#include<string.h>
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        int two[n];
        scanf("%d",&two[0]);
        int thr;
        if(scanf("0",&thr))
        {
            for(int i=1;i<n;i++)
            {
                scanf("%d",&two[i]);
                for (int j=i;j>0;j--)
                {
                    if(two[j]<two[j-1])
                    {
                        int two0=two[j];
                        two[j]=two[j-1];
                        two[j-1]=two0;
                    }
                    else
                    {
                        break;
                    }
                }
                printf("%d",&two[i]);
            }
        }
        else
        {
            for(int i=1;i<n;i++)
            {
                scanf("%d",&two[i]);
                for (int j=i;j>0;j--)
                {
                    if(two[j]>two[j-1])
                    {
                        int two1=two[j];
                        two[j]=two[j-1];
                        two[j-1]=two1;
                    }
                    else
                    {
                        break;
                    }
                }
                printf("%d",&two[i]);
            }
        }
    }
    return 0;
}
 这样写问题出在哪,还是就不支持这么写
                                                                                    import java.util.*;
public class Main{
    public static void main (String[] args){
        Scanner sc = new Scanner(System.in);
        int len = sc.nextInt();
        int[] num = new int[len];
        for (int i = 0; i < len; i++) {
            num[i] = sc.nextInt();
        }
        int mode = sc.nextInt();
        Arrays.sort(num);
        if (mode == 0){
            for (int i = 0; i < len; i++)
                System.out.print(num[i]+" ");
        } else {
         for (int i = len - 1; i >= 0; i--)
            System.out.print(num[i]+" ");
        }
    }
} import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        String[] split = br.readLine().split(" ");
        int[] arr = new int[split.length];
        for (int i = 0; i < split.length; i++) {
            arr[i] = Integer.parseInt(split[i]);
        }
        String s1 = br.readLine();
        if (s1.equals("0")) {
            quickSortIncrease(arr, 0, arr.length - 1);
            print(arr);
        } else {
            quickSortDecrease(arr, 0, arr.length - 1);
            print(arr);
        }
    }
    private static void quickSortIncrease(int[] arr, int left, int right) {
        if (left >= right) return;
        int i = left - 1, j = right + 1, mid = arr[(left + right) >> 1];
        while (i < j) {
            do i++; while (mid > arr[i]);
            do j--; while (mid < arr[j]);
            if (i < j) {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        quickSortIncrease(arr, left, j);
        quickSortIncrease(arr, j + 1, right);
    }
    private static void quickSortDecrease(int[] arr, int left, int right) {
        if (left >= right) return;
        int i = left - 1, j = right + 1, mid = arr[(left + right) >> 1];
        while (i < j) {
            do i++; while (mid < arr[i]);
            do j--; while (mid > arr[j]);
            if (i < j) {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        quickSortDecrease(arr, left, j);
        quickSortDecrease(arr, j + 1, right);
    }
    private static void print(int[] arr) {
        for (int i : arr) {
            System.out.print(i + " ");
        }
    }
}
 def quick_sort(l,order):
    if len(l)<=1:
        return l
    else:
        i=-1;j=0
        pivot=l[-1]
        while j<=len(l)-2:
            if eval('l[j]{}pivot'.format('>' if order==0 else '<')):
                j+=1
            else:
                i+=1
                temp=l[j];l[j]=l[i];l[i]=temp#完成一次交换
                j+=1
        temp=pivot;l[-1]=l[i+1];l[i+1]=temp#完成一次交换
        left=quick_sort(l[:i+1],order);right=quick_sort(l[i+2:],order)
        return left+[l[i+1]]+right
while True:
    try:
        n=int(input())
        l=list(map(int,input().split()))
        order=int(input())
        #利用快慢指针进行快速排序,快指针j和慢指针i
        #j从第一个数扫描到pivot前面的一个数
        #快指针j每到一个数,判断该数是否小于pivot,若小于,则慢指针i进一位,并交换i、j对应的数字
        #完成一轮遍历后,i及其之前的数字都比pivot小,i之后的数字都比pivot大
        #因此,将i+1上的数字和pivot的数字交换,再对左右两边的序列继续排序即可
        l=quick_sort(l,order)
        print(*l)
    except:
        break def partition(nums, left, right, method): import random rand = random.randint(left,right) nums[left],nums[rand] = nums[rand],nums[left] tmp = nums[left] if method == '0': while left < right: while left < right and nums[right] >= tmp: right -= 1 nums[left] = nums[right] while left < right and nums[left] <= tmp: left += 1 nums[right] = nums[left] nums[left] = tmp return left if method == '1': while left < right: while left < right and nums[right] <= tmp: right -= 1 nums[left] = nums[right] while left < right and nums[left] >= tmp: left += 1 nums[right] = nums[left] nums[left] = tmp return left def quick_sort(nums, left, right, method): if left < right: mid = partition(nums, left, right, method) quick_sort(nums, left, mid-1, method) quick_sort(nums, mid+1, right, method) while True: try: n = int(input()) nums = list(map(int, input().split())) method = input() quick_sort(nums, 0, n-1, method) print(*nums) except: break
# 方法一:
while True:
    try:
        count, arr = input(), map(int, input().strip().split(' '))
        flag = input().strip()
        if flag == '0':
            arr = sorted(arr)
            # print(arr)
        if flag == '1':
            arr = sorted(arr, reverse=True)
            # print(arr)
        print(' '.join(map(str, arr)))
    except:
        break
# 方法二:(reverse=True可以直接写成reverse=1)
while True:
    try:
        count, arr = input(), map(int, input().strip().split(' '))
        flag = int(input().strip())
        arr = sorted(arr, reverse=flag)
        print(' '.join(map(str, arr)))
    except:
        break #include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,a[10000],flag,tmp;
        /**********输入**********/
    while(cin>>n)
    {
        for(int i=0;i<n;i++)
        {
            cin>>a[i];
        }
        cin>>flag;
        /**********冒泡排序**********/
        for(int j=0;j<n-1;j++)
            for(int k=j+1;k<n;k++)
            {
                if(a[j]>a[k])
                {
                    tmp=a[j];
                    a[j]=a[k];
                    a[k]=tmp;
                }
            }
        /**********升序输出**********/
        if(flag==0)
        {
            for(int i=0;i<n-1;i++)
            {
                cout<<a[i]<<" ";
            }
            cout<<a[n-1];
        }
        /**********降序输出**********/
        if(flag==1)
        {
            for(int i=n-1;i>0;i--)
            {
                cout<<a[i]<<" ";
            }
            cout<<a[0];
        }
        cout<<endl;
    }
    return 0;
} #include<stdio.h>
void sort(int A[], int N)
{
    int i, j, inc;
    int tmp;
    for(inc = N / 2; inc > 0; inc /= 2){
        for(i = inc; i < N; i++){
            tmp = A[i];
            for(j = i; j >= inc; j -= inc){
                if(A[j - inc] > tmp)
                    A[j] = A[j - inc];
                else
                    break;
            }
            A[j] = tmp;
        }
    }
}
int main(int argc, char **argv)
{
    int N = 0;
    int i = 0;
    while(scanf("%d", &N) != EOF){
        int flag;
        int *A = (int *)malloc(sizeof(int) * N);
        for(i = 0; i < N; ++i)
            scanf("%d", A + i);
        scanf("%d", &flag);
        sort(A, N);
        if(flag == 0){
            for(i = 0; i < N; ++i){
                if(i < N - 1)
                    printf("%d ", A[i]);
                else
                    printf("%d\n", A[i]);
            }
        }
        else{
            for(i = N - 1; i >= 0; --i){
                if(i > 0)
                    printf("%d ", A[i]);
                else
                    printf("%d\n", A[i]);
            }
        }
        free(A);
    }
} while True:
    try:
        def quick_sort(arr, left, right):
            """快速排序"""
            if left >= right:
                return arr
            key = arr[left]
            low = left
            high = right
            while left < right:
                while left < right and arr[right] >= key:
                    right -= 1
                arr[left] = arr[right]
                while left < right and arr[left] <= key:
                    left += 1
                arr[right] = arr[left]
            arr[right] = key
            quick_sort(arr, low, left - 1)
            quick_sort(arr, left + 1, high)
            return arr
        total_num = int(input())
        input_list = list(map(int, input().strip().split()))
        descending = int(input())
        if len(input_list) == 1:
            print(input_list[0])
        if descending == 0:
            print(" ".join(list(map(str, quick_sort(input_list, 0, len(input_list) - 1)))))
        else:
            print(" ".join(list(map(str, quick_sort(input_list, 0, len(input_list) - 1)[::-1]))))
    except:
        break
快速排序实现基本功能,通过列表索引实现逆序
#include <iostream>
#include <vector>
using namespace std;
void quick_sort(vector&v,int start,int end,int& sort_flag)
{
    if(start >= end)
        return;
    int low = start,high = end;
    int pivot = v[start];
    while(low < high)
    {
        if(sort_flag == 0)
            while(low =pivot) high--;
        else
            while(low < high && v[high]<=pivot) high--;
        v[low] = v[high];
        if(sort_flag == 0)
            while(low < high && v[low]<=pivot) low++;
        else
            while(low =pivot) low++;
        v[high] = v[low];
    }
    v[low] = pivot;
    quick_sort(v,start, low-1, sort_flag);
    quick_sort(v, low+1, end, sort_flag);
}
int main()
{
    int n;
    while(cin >> n)
    {
        vector v(n,0);
        for(int i=0;i<n;++i)
            cin >> v[i];
        int sort_flag;
        cin >> sort_flag;
        quick_sort(v, 0, n-1, sort_flag);
        for(int i=0;i<n;++i)
            cout << v[i] << " ";
        cout << endl;
    }
    return 0;
}