Если у тебя C++, то для работы с динамическими массивами забудь про указатели и new и используй vector. А если размер массива заранее известен, то использовать динамические массивы в принципе бессмысленно.
int *a=new int[1000]; - абсолютно бессмысленная трата памяти. У тебя же массив на 100 элементов и память под лишние 900 элементов выбрасывается на ветер.
int *k=new int; - абсолютно бессмысленно. Намного эффективнее просто int k;
std::rand(); - крайне некачественный генератор псевдослучайных чисел. В стандартной библиотеке С++ есть несравнимо более лучшие варианты.
for (int i = 1,j=0;j<100000;j++,i++) { ... if(i==99)i=0; } самый бредовый вариант пузырьковой сортировки, который мне встречался. Даже в наивной реализации сортировки (код λ в соседнем ответе) на 100 элементов требуется всего 4950 итераций внутреннего чикла, а у тебя 100000.
Писать *(a+i), (a+i-1) - говнокод. Варианты a, a[i - 1] ничем не отличаются (компилятор генерирует идентичный машинный код), но читаются несравнимо лучше.
Использовать запятую только для того, чтобы не писать { } - глупость. Если конструкции вида *k=*(a+i-1),*(a+i-1)=*(a+i),*(a+i)=*k; встретятся в твоём реальном коде, икаться тебе будет сильно и часто.